给你一个 非空 整数数组 nums
,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
你必须设计并实现线性时间复杂度的算法来解决此问题,且该算法只使用常量额外空间。
思路:以前学过左神的算法课,讲过位运算,一下子就想到了
class Solution {
public int singleNumber(int[] nums) {
int eor=0;
for(int i=0;i<nums.length;i++){
eor^=nums[i];
}
return eor;
}
}
扩充:leetcode260(这个是一起学的)
给你一个整数数组 nums
,其中恰好有两个元素只出现一次,其余所有元素均出现两次。 找出只出现一次的那两个元素。你可以按 任意顺序 返回答案。
你必须设计并实现线性时间复杂度的算法且仅使用常量额外空间来解决此问题。
class Solution {
public int[] singleNumber(int[] nums) {
int[] res={0,0};
int eor=0;
for(int i=0;i<nums.length;i++){
eor^=nums[i];
}
//此时eor等于a^b
int rightOne=eor&(~eor+1);
for(int i=0;i<nums.length;i++){
if((nums[i]&rightOne)!=0){
res[0]^=nums[i];
}
}
res[1]=eor^res[0];
return res;
}
}