背景
image.png解决方案
第一种解法 使用hashmap
class Solution {
public int singleNumber(int[] nums) {
HashMap<Integer,Integer> map = new HashMap<>();
for(int i=0;i<nums.length;i++){
if(map.get(nums[i])==null){
map.put(nums[i],1);
}else {
int mid = map.get(nums[i]);
map.put(nums[i],mid+1);
}
}
int count = 0 ;
int result = -1;
for(Integer key: map.keySet() ){
if(map.get(key)==1){
count++;
result = key;
}
}
if(count==1){
return result;
}else{
return -1;
}
}
}
image.png
第二种解法 位运算 使用异或
既满足时间复杂度又满足空间复杂度,就要提到位运算中的异或运算 XOR,主要因为异或运算有以下几个特点:
一个数和 0 做 XOR 运算等于本身:a⊕0 = a
一个数和其本身做 XOR 运算等于 0:a⊕a = 0
XOR 运算满足交换律和结合律:a⊕b⊕a = (a⊕a)⊕b = 0⊕b = b
class Solution {
public int singleNumber(int[] nums) {
int temp = 0;
for(int data:nums){
temp = temp^data;
}
return temp;
}
}
image.png
网友评论