数组中数字出现的次数(中等)
2020年9月9日
题目来源:力扣
解题
- 暴力
双指针暴力解
class Solution {
public int[] singleNumbers(int[] nums) {
int[] res=new int[2];
int idx=0;
for(int i=0;i<nums.length;i++){
if(nums[i]==-1) continue;
for(int j=i+1;j<nums.length;j++){
if(nums[i]==nums[j]){
nums[i]=nums[j]=-1;
break;
}
}
if(nums[i]!=-1){
res[idx]=nums[i];
idx++;
}
}
return res;
}
}
- 位运算
参照官方题解
class Solution {
public int[] singleNumbers(int[] nums) {
int[] res=new int[2];
int tmp=0;
for(int num:nums){
tmp^=num;
}
int low_bit=tmp&(-tmp);
for(int num:nums){
if((num&low_bit)==0){
res[0]^=num;
}
else res[1]^=num;
}
return res;
}
}