题目描述:
力扣1748:给定一个整数数组。数组中唯一元素是那些只出现恰好一次的元素。请你返回nums中唯一元素的和
解题思路:
该题中为得出最终结果,需要统计两条信息:①,出现在数组中的数;②每个数出现的次数,因此可以使用Hash表来完成上面两种数的统计,最终再通过遍历找出只出现一次的数进行累加即可得出最终答案
解题步骤:
- 创建一个HashMap;
- 通过遍历给出的数组,将数组中出现的值作为HashMap的Key存储,该值出现的次数作为value进行存储;
- 创建一个int类型初始值为0的sum,用于存储结果;
- 遍历该HashMap,使用if语句判断每个数值出现的次数,将出现一次的值累加到sum中
- 最后返回sum
代码:
class Solution {
public int sumOfUnique(int[] nums) {
int sum = 0;
Map <Integer,Integer> map = new HashMap <>();
for(int i = 0;i < nums.length;i++){
map.put(nums[i],map.getOrDefault(nums[i],0)+1);
}
for (Integer i : map.keySet()){
if (map.get(i) == 1){
sum += i;
}
}
return sum;
}
}
知识点:
在该段代码中使用到了很多HashMap的方法
1.声明一个HashMap
Map <Key的类型,value的类型> 名称 = new HashMap <>();
2. getOrDefault()方法
该方法用于在HashMap中查找与key对应的value,括号中的参数分别为key值,返回值;如果该HashMap中存在该key值,则返回与key对应的value,如果不存在该key,则返回后面参数的返回值。
与get()方法不同,get方法如果没有找到指定的key值,则返回null。
代码中的
map.put(nums[i],map.getOrDefault(nums[i],0)+1);
等同于:
int val = map.getOrDefault(nums[i]);
map.get(nums[i],val);
这里使用getOrDefault()方法的好处是可以指定未找到时的返回值为0,当map中不存在该值时,就会将key = nums[i],value=1存储到map中,这样就省去了一次判断。
3. keySet()方法
该方法可以返回 hashMap 中所有 key 组成的集合视图