剑指offer 只出现一次的数字Java
作者:互联网
力扣题目链接
不知道别的方法怎么样,只能想出HashMap
class Solution {
public int singleNumber(int[] nums) {
Map<Integer,Integer> map = new HashMap<Integer,Integer>();
for(int num :nums){
map.put(num,map.getOrDefault(num,0)+1);
}
for(Map.Entry<Integer,Integer> entry: map.entrySet()){
if(entry.getValue().equals(1)){
return entry.getKey();
}
}
return -1;
}
}
力扣大佬的代码1ms
class Solution {
//将整数的各个数位上的加起来,然后对3取余,若结果为0,则待求数字在该位上是0;
//若结果为1,则待求数字在该位上是1.
public int singleNumber(int[] nums) {
//java的int整型为32位
int[] arr=new int[32];
for(int num:nums){
for(int i=0;i<32;i++){
arr[i]+=(num>>(31-i))&1;
}
}
int res=0;
for(int i=0;i<32;i++){
res=(res<<1)+arr[i]%3;
}
return res;
}
}
标签:map,Java,数字,offer,int,nums,待求,num,entry 来源: https://www.cnblogs.com/jianjiana/p/15861794.html