力扣268.丢失的数字
public static int missingNumber(int[] nums) {
int n=nums.length;
int []ret=new int[n+1];
for(int i=1;i<=n;i++){
ret[nums[i-1]]++;
}
for(int i=0;i<=n;i++){
if(ret[i]==0){
return i;
}
}
return 0;
}
和上一道题,一个性质,用的是底层哈希表的思想,只需要把他的数值放到这个哈希表里面,然后看哪个下面里面是没有值的
力扣371.两整数之和
笔试场上,之间不讲武德 return a+b
解法(无进位相加)
public static int getSum(int a, int b) { int m=a; int n=b; //这里需要注意n代表的就是a&b<<1,所以我们是用n!=0,而不是a&b<<1!=0,不然这样会少一步。 while(n!=0){ m=a^b; n=(a&b)<<1; a=m; b=n; } return m; }
力扣137.只出现一次的数字II
1.暴力无脑解法,让他有没有顺序,然后最后会剩下一个,就肯定是它了。
class Solution { public int singleNumber(int[] nums) { int m=nums.length; if(m==1){ return nums[0]; } int i=0; Arrays.sort(nums); while(i<m){ if(m-1==i){ return nums[i]; } if(nums[i]==nums[i+1]&&nums[i]==nums[i+2]){ i+=3; }else{ return nums[i]; } } return 0; } }
力扣面试题17.19消失的两个数字
位运算第一弹-CSDN博客
这题的知识点和这道题很像
class Solution {
public static int[] missingTwo(int[] nums) {
int m=nums.length;
int lowBit=0;
int []ret=new int[2];
for(int x:nums){
lowBit^=x;
}
for(int i=1;i<=m+2;i++){
lowBit^=i;
}
lowBit=(lowBit&-lowBit);
for(int x:nums){
ret[(x&lowBit)==0?0:1]^=x;
}
for(int i=1;i<=m+2;i++){
ret[(i&lowBit)==0?0:1]^=i;
}
return ret;
}
}