文章目录
一、map & set 基础练习
1.有十万个数据,找到第一个重复的数据
就是说我们 在这个题上用了 set 的有关性质 , 我们有十万个数据,要查找到第一个重复的数据,我们可以这样: 我们将 list 中的数据一个一个放入 set中,如果 set没有这个数据,那么就 放入set中,如果 set中包含了这个数据,那么打印这个数据,同时 break;
2. 有十万个数据,去除掉所有重复的数据
直接遍历这个数组,将数组所有数据全部放进 set中,重复的数据自然会 插入失败,所以最后 set 中的元素全都是 不重复的数据.
3.有十万个数据,统计每个数据出现了多少次
使用map 和 set 来解题
这道题非常经典,所以我们 一定要理解深刻
我们将 数组中的 各个数据,及数据出现的次数 作为一个键值对 放入Map 中
put之前先判断 map 中之前是否有 key ,如果没有的话,map.getKey() == null ,我们就直接 map.put( key,1 ).
如果没有的话,先 int count = map.getKey(), 得到这个key之前出现的次数,然后 map.put(key,count+1)
最后遍历 map,将map的所有键值对 全部打印出来.
二、 刷题练习
1. 只出现一次的数字
题解代码1:
写这个代码的思路: 我们有一个 Set 的集合,先遍历数组,如果Set 里不包含 nums[i],那么就把 nums[i] 放入 set 中,但是如果 Set 中包含 nums[i] ,那么就把 set中的 nums[i] 删除.
到最后 set中剩下的就是只出现一次 的数字
题解代码2:
写这个思路的代码: 这个是用Map 记录了nums 数组中每一个数据出现的次数,最后遍历 map.entrySet(),当 entry.getVaue()==1 时,这个数据就出现了一次,返回 entry.getKey().
如果在这组数据中没有单独出现的数字,那么返回-1(不要那么严谨,只是了解逻辑即可,不需要联系业务逻辑.)