力扣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; } }