136. 只出现一次的数字
查看原题
解题思路
这种方法时间复杂度较高
利用indexOf方法判断数组当前项在前后是否还能找到与他一样的数,如果不能找到,这个数即为所求。
代码
/**
* @param {number[]} nums
* @return {number}
*/
var singleNumber = function(nums) {
const length = nums.length;
for (let i = 0; i < length; i++) {
if (nums.indexOf(nums[i], i + 1) === -1 && nums.indexOf(nums[i]) === i) {
return nums[i]
}
}
};
解题思路
- 将数组转为set集合,set集合没有重复项
- 对set集合每一项求和 sum1
- 对数组求和 sum2
- set集合的和sum1表示数组不重复项的和,乘以2再减去sum2即为那个只出现一次的数
代码
/**
* @param {number[]} nums
* @return {number}
*/
var singleNumber = function(nums) {
const set = new Set(nums); //将nums转为集合
let sum1 = 0; //求set集合各项的和
let sum2 = 0; //求数组的各项和
for (const item of set) {
sum1 += item;
}
nums.forEach(vaule => {
sum2 += vaule;
})
return (2 * sum1) - sum2;
};

浙公网安备 33010602011771号