HashMap统计数组元素
137. 只出现一次的数字 II
class Solution {
/*
位运算 异或 ^
1 ^ 0 = 1
两个相同的数字进行异或运算结果为0
1 ^ 1 = 0;
通过逻辑电路 如何设计出三个数操作互相抵消? 没有深入的学习过底层电路
优先使用HashMap来解题
*/
public int singleNumber(int[] nums) {
Map<Integer,Integer> map = new HashMap<>();
for(int num:nums){
Integer in = map.get(num);
if(in==null){
map.put(num,1);
}else{
map.put(num,in+1);
}
}
for(Integer key:map.keySet()){
if(map.get(key) ==1){
return key;
}
}
//V put(K key,V value)
return 0;
}
}
169. 多数元素
找数量>len/2的元素
class Solution {
/**
如何通过一次遍历找出
*/
// V put(K key,V value)
public int majorityElement(int[] nums) {
int len = nums.length;
Map<Integer,Integer> map = new HashMap<>();
for(int i = 0;i<len ;i++){
Integer in = map.get(nums[i]);
if(in == null){
map.put(nums[i],1);
}else{
map.put(nums[i],in+1);
}
}
for(Map.Entry<Integer,Integer> entry:map.entrySet()){
if(entry.getValue()>len/2){
return entry.getKey();
}
}
return -1;
}
}
class Solution {
public int majorityElement(int[] nums) {
Arrays.sort(nums);
return nums[nums.length / 2];
}
}