LeetCode 217.存在重复元素
目录
题目:
题目描述:
题目链接:
思路:
思路一详解(排序):
思路二详解(Set):
思路三详解(Map):
代码:
Java思路一(排序)代码:
Java思路二(Set)代码:
Java思路三(Map)代码:
题目:
题目描述:
题目链接:
217. 存在重复元素 - 力扣(LeetCode)
思路:
思路一详解(排序):
先对整数数组进行排序,遍历排序后数组的每一位,再判断该位是否等于后一位。只要找到某一位等于后一位就说明任一值在数组至少出现两次,无需后续判断直接return true;即可。如果整个数组元素全部遍历完都不存在某一位等于后一位,返回false(索引结束条件为i<nums.length-1,防止数组越界)
思路二详解(Set):
遍历整个数组把每个数字放到Set中,Set具有去重的特性。每次放入数字时调用contains判断Set中是否存在该数字,如果已经存在就说明任一值在数组中出现至少两次,直接返回true。如果成功把数组的全部数组都放入Set中,就说明数组中不存在重复的元素,返回false
思路三详解(Map):
这题完全没必要用到Map,效率非常低,但是我还是提出这个思路也相当于是引入后续题目的思路,同时自己作为Java小白熟悉一下语法
Map里面存的是键值对,这题键存的是数组中的元素值,值存的是数组中这个元素出现的次数。遍历整个数组把每个数字存入键中,调用containsKey判断Map中的键是否存在这个数字,如果存在就调用get获取到这个键对应的值(即出现次数)+1再把调用put把键值对再存回Map中。如果不存在,就说明这个数字第一次出现,那么把键值对的值设为1再存回Map中。
最后利用键值对的方式遍历Map集合,用count记录每个键值对的值,判断count是否>=2,如果是则return true;如果不是则return false;
代码:
Java思路一(排序)代码:
class Solution {public boolean containsDuplicate(int[] nums) {Arrays.sort(nums);for(int i=0;i<nums.length-1;i++){if(nums[i]==nums[i+1]){return true;}}return false;}
}
Java思路二(Set)代码:
class Solution {public boolean containsDuplicate(int[] nums) {Set<Integer> set = new HashSet<>();for(int i=0;i<nums.length;i++){if(set.contains(nums[i])){return true;}set.add(nums[i]);}return false;}
}
Java思路三(Map)代码:
class Solution {public boolean containsDuplicate(int[] nums) {HashMap<Integer,Integer> hm = new HashMap<>();for(int i=0;i<nums.length;i++){if(hm.containsKey(nums[i])){int count=hm.get(nums[i]);count++;hm.put(nums[i],count);}else{hm.put(nums[i],1);}}Set<Map.Entry<Integer,Integer>> entries = hm.entrySet();for (Map.Entry<Integer, Integer> entry : entries) {int count = entry.getValue();if (count >= 2) {return true;}}return false;}
}