给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现了三次。找出那个只出现了一次的元素。
说明:
你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?
示例 1:
输入: [2,2,3,2] 输出: 3 示例 2:
输入: [0,1,0,1,0,1,99] 输出: 99
来源:力扣(LeetCode) 链接:leetcode-cn.com/problems/si…
解题思路:
这个和 《只出现一次的数字一》 不同的在与重复的数字出现了三次,单纯的用异或是得不到结果的,既然如此,那就把数组变成只出现两次的不就可以实现了吗,刚好之前刷到除去重复的 《删除排序数组中的重复项》 这道题,刚好就是要求把数组变成只重复两次,但是这道题的前提是数组是按升序排序的,没问题,我们把数组先排序再处理不就好了吗,虽然时间复杂度和空间都不好看,但是这是第一次自己独立做出的中等难度的题目,而且结合了以前刷到过的题,纪念一下
var singleNumber = function(nums) {
nums.sort(function(a, b){return a - b});
let i=0;
let res=0;
for(let j=0;j<nums.length;j++){
if(i<2||nums[j]!=nums[i-2]){
nums[i]=nums[j];
i++
}
}
for(let l=0;l<=i-1;l++){
res^=nums[l]
}
return res
};
链接:leetcode-cn.com/problems/re…
