- 数组中数字出现的2次,寻找出现1次的数字(只有1个数字出现1次)
class Solution {
public int singleNumbers(int[] nums) {
int n = 0 ;
for(int i : nums){
n^=i;
}
return n;
}
2.数组中数字出现的2次,寻找出现1次的数字(有2个数字出现1次)(leetcode 面试题56 - I):
- 先将所有的数字全部异或,得到所要查找2个数字异或的结果
or
,提取2个数字在二进制上不相同位,以此来切分数组分为两部分,该两部分的解题方法如1所示。
class Solution {
public int[] singleNumbers(int[] nums) {
int or = 0;
for(int i :nums){
or = or^i;
}
int z = or&(-or);
int one = 0 , zero = 0;
for(int i :nums){
if((i & z) == 0){
zero = zero^i;
}else{
one = one ^ i;
}
}
return new int[] {zero,one};
}
}
- 数组中数字出现的3次,寻找出现1次的数字(只有1个数字出现1次)(leetcode 面试题56 - II)