/**
解题思路:目前没有想到好的方法:就想到利用哈希表存值
*/classSolution{publicintsingleNumber(int[] nums){Map<Integer,Integer> map =newHashMap<>();for(int num : nums){if(map.containsKey(num))
map.put(num , map.get(num)+1);//比getOrDefault好用else
map.put(num ,1);}for(int num : nums){if(map.get(num)==1)return num;}return-1;}}/**
书上解法: 如果一个数字出现3次,它的二进制每一位也出现的3次。如果把所有的出现三次的数字的二进制表示的每一位都分别加起来,那么每一位都能被3整除。 我们把数组中所有的数字的二进制表示的每一位都加起来。如果某一位能被3整除,那么这一位对只出现一次的那个数的这一肯定为0。如果某一位不能被3整除,那么只出现一次的那个数字的该位置一定为1.
*/classSolution{publicintsingleNumber(int[] nums){int[] k =newint[32];for(int num : nums){for(int i=0; i<32; i++){
k[i]+=num&1;
num>>=1;}}int res =0;for(int i=0; i<32; i++){
res |=(k[i]%3)<<i;}return res;}}
classSolution{publicdoublemyPow(double x,int n){if(n==0)return1;if(n==1)return x;if(n==-1)return1/x;double div =myPow(x,n/2);double mod =myPow(x,n%2);return div*div*mod;}}