LeetCode刷题辛酸历程-(1)

开始学习算法!开始刷LeetCode!以后可能会修改现阶段的代码也说不定,嘻嘻。

暂定一篇文章十个题⑧,虽然没刷那么多呢现在

1.两数之和

给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。

你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。

示例:

给定 nums = [2, 7, 11, 15], target = 9

因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]

自己解题的代码:

var twoSum = function(nums, target) {
    let first = 0;
    let second = 0;
    for(let i = 0; i < nums.length; i++){
        for(let j = i + 1; j < nums.length; j++){
            if(nums[i] + nums[j] === target){
                first = i;
                second = j;
                let number = [first, second];
                return number
            }
        }
    }
    let number = [first, second];
    return number
};

1128. 等价多米诺骨牌对的数量

给你一个由一些多米诺骨牌组成的列表 dominoes。

如果其中某一张多米诺骨牌可以通过旋转 0 度或 180 度得到另一张多米诺骨牌,我们就认为这两张牌是等价的。

形式上,dominoes[i] = [a, b] 和 dominoes[j] = [c, d] 等价的前提是 a==c 且 b==d,或是 a==d 且 b==c。

在 0 <= i < j < dominoes.length 的前提下,找出满足 dominoes[i] 和 dominoes[j] 等价的骨牌对 (i, j) 的数量。

示例:

输入:dominoes = [[1,2],[2,1],[3,4],[5,6]]
输出:1
 

提示:

1 <= dominoes.length <= 40000
1 <= dominoes[i][j] <= 9

/**
 * @param {number[][]} dominoes
 * @return {number}
 */
var numEquivDominoPairs = function(dominoes) {
	let change = 0;
	let ans = 0;
	let hash = {}
	
	dominoes = dominoes.map(function (arr) {
		if(arr[0] > arr[1]){
			change = arr[0];
			arr[0] = arr[1];
			arr[1] = change;
		}
		return arr;
	})
	for(let i = 0; i < dominoes.length; i++){
		
		if(hash[dominoes[i]]){
			hash[dominoes[i]]++;
		}else{
			hash[dominoes[i]] = 1;
		}
	}
	for(arr in hash){
		ans += hash[arr]*(hash[arr] - 1)/ 2;
	}
	return ans;
};

解题思路:

1、将所有数组进行排序

2、建立hash表(JavaScript的对象就是一个hash表)

3、进行组合数计算 C = i * (i - 1) /2

发布了49 篇原创文章 · 获赞 61 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/wuyxinu/article/details/103686085