简介
题目链接:https://leetcode.cn/problems/contains-duplicate/description/
解决方式:数组 + 哈希集合
这是作者学习众多大神的思路进行解题的步骤,很推荐大家解题的时候去看看题解里面大佬们的思路、想法!
哈希集合
推荐看 灵茶山艾府 大佬的题解!
解法一
思路:此处我们借助集合到去重特性,将数组元素放入集合中,集合会去除重复的元素,这样数组中的元素全部存放进集合后,若集合的大小比数组小,则证明存在重复元素,反之就不存在。
推荐看 灵茶山艾府 大佬的题解!
java
class Solution {
public boolean containsDuplicate(int[] nums) {
// 哈希集合
HashSet<Integer> set = new HashSet<>();
// 数组元素存入集合中
for (int x : nums) {
set.add(x);
}
// 集合大小比数组小,则存在重复元素,反之则不存在
return set.size() < nums.length;
}
}
解法二
思路:我们也可以利用集合添加重复元素返回 false 的特性,在添加时判断是否存在重复元素。
java
class Solution {
public boolean containsDuplicate(int[] nums) {
// 哈希集合
HashSet<Integer> set = new HashSet<>();
for (int x : nums) {
// 元素已存在,直接返回
if (!set.add(x)) {
return true;
}
}
// 没有重复元素
return false;
}
}
哈希表
思路:哈希集合的底层是哈希表,所以我们也可以直接使用哈希表判断是否存在重复元素。
java
class Solution {
public boolean containsDuplicate(int[] nums) {
// 哈希表
HashMap<Integer, Boolean> map = new HashMap();
// 迭代数组
for(int num : nums){
// 哈希表中存在,则返回 true
if(map.containsKey(num)){
return true;
}
// 不存在,存入
map.put(num, 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;
}
}