开始学习算法!开始刷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
};
给你一个由一些多米诺骨牌组成的列表 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