力扣刷题——位运算—只出现1次的数字
作者:互联网
260. 只出现一次的数字 III
class Solution {
public int[] singleNumber(int[] nums) {
int ret = 0;
for (int i = 0; i < nums.length; i++) {
ret ^= nums[i];
}
int div = 1;
假设两个数是 a、b
int a=0;
int b=0;
找到 a、b 任意一个 二进制位相异 的地方div
while ((div & ret) == 0){
div <<= 1;
}
for (int num:nums) {
相同的数,和div相 & ,得到的结果也一样(若为0,都为0;若为1,都为1),就会被分到同1个组
那两个不同的数,和div相 & , 得到的结果不同,会被分到不同的组
if ((div & num) != 0)
a ^= num;
else
b ^= num;
}
return new int[]{a,b};
}
}
标签:运算,nums,int,ret,力扣,num,若为,div,刷题 来源: https://blog.csdn.net/m0_38057941/article/details/120253419