题目:
给你一个整数数组 nums ,除某个元素仅出现 一次 外,其余每个元素都恰出现 三次 。请你找出并返回那个只出现了一次的元素。
示例 1:
输入:nums = [2,2,3,2]
输出:3
示例 2:
输入:nums = [0,1,0,1,0,1,99]
输出:99
提示:
1 <= nums.length <= 3 * 104
-231 <= nums[i] <= 231 - 1
nums 中,除某个元素仅出现 一次 外,其余每个元素都恰出现 三次
解题之前补充hashMap用法:(哈希表)
1.创建HashMap对象
HashMap<String,Integer> hashMap = new HashMap<>();
2.添加键值对
添加元素时,如果key已经存在,则返回旧value,并将新的value存到该key中;如果key不存在,则返回null
hashMap.put("aa",1);
hashMap.put("bb",2);
hashMap.put("cc",3);
3.删除元素
如果之前对相同key多次put,则可以移除key对应的旧value,而最新的value不受影响。(×)
remove(key):删除成功(存在key),返回被删除的key对应的value,否则返回null。
remove(key,value):删除成功(存在entry),返回true,否则返回false。
hashMap.remove("bb");
hashMap.remove("aa",5);
4.获取元素
对于获取元素,有get(key)和getOrDefault(key,defaultValue)(1.8之后)两种方法.
hashMap.get("cc")
getOrDefault("aa",-1)//key=aa不存在,所以返回默认value -1
5.元素遍历
第一种:
Iterator iterator = hashMap.keySet().iterator();
while (iterator.hasNext()){
String key = (String)iterator.next();
System.out.println(key+"="+hashMap.get(key));
}
第二种:
Iterator iterator1 = hashMap.entrySet().iterator();
while (iterator1.hasNext()){
Map.Entry entry = (Map.Entry) iterator1.next();
String key = (String) entry.getKey();
Integer value = (Integer) entry.getValue();
System.out.println(key+"="+value);
}
第三种:
for(int i:map.keySet()){
if(map.get(i)==1){
return i;
}
}
6.判断key或者value是否存在。
hashMap.containsKey("aa");
hashMap.containsValue(1);
最终代码:
class Solution {
public int singleNumber(int[] nums) {
Map<Integer,Integer> map=new HashMap<>();
for(int num:nums){
map.put(num,map.getOrDefault(num,0)+1);
}
for(int i:map.keySet()){
if(map.get(i)==1){
return i;
}
}
return 0;
}
}