解决数组相关问题时得到一些收获,总结在这里。
1.给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
首先看到题的时候最直观的想到就是去查找每个元素在数组中第一次出现和最后一次出现的位置,如果相同则证明
这个元素只出现了一次。所以代码如下
/**
* V1.0.0
* @param {number[]} nums
* @return {number}
*/
var singleNumber = function(nums) {
for(var i=0;i<nums.length;i++){
if(nums.indexOf(nums[i])==nums.lastIndexOf(nums[i])){
return nums[i]
}
}
};
但这种方式通过16个用例执行了460ms,效率较低。
后边看到其他的解决方案使用了位操作,两个相等的数异或为0;一个不为0的数与0异或为这个数本身
所以如果数组中只有一个元素出现了一次,其余都出现了两次,那么这些元素相互异或的结果,一定是
只出现了一次的那个元素。那么代码可以修改为:
/**
* V1.1.0
* @param {number[]} nums
* @return {number}
*/
var singleNumber = function(nums) {
var result = 0;
for(var i=0;i<nums.length;i++){
result ^= nums[i]
}
return result
};
执行耗时72ms。