#LeetCode匠#存在重复元素

147 阅读1分钟

「这是我参与11月更文挑战的第14天,活动详情查看:2021最后一次更文挑战」。

给定一个数组,如何快速判断存在重复元素?可以使用哪些数据结构和算法快速筛选和比较?你想得到的有几种解法?

题目描述

给定一个整数数组,判断是否存在重复元素。

如果存在一值在数组中出现至少两次,函数返回 true 。如果数组中每个元素都不相同,则返回 false 。

题目示例

题目解法

解法一:排序对比法

先排序,而后两两比较,存在不同即合理

/**
 * 排序对比法
 */
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;
    }
}

解法二:HashSet筛选法

存在不同即判定符合结果

/**
 * HashSet筛选法
 */
class Solution {
    public boolean containsDuplicate(int[] nums) {
        Set<Integer> arraySet = new HashSet<>();
        for (int i = 0; i < nums.length; i++) {
            // 存在不同即返回
            if(!arraySet.add(nums[i])){
                return true;
            }
        }
        return false;
    }
}

解法三:HashSet比较法

同筛选法不同,最终采用比较数组长度判定符合结果

/**
 * HashSet比较法
 */
class Solution {
    public boolean containsDuplicate(int[] nums) {
        // 保存唯一值
        Set<Integer> arraySet = new HashSet<>();
        for(int i = 0; i<nums.length; i++){
            arraySet.add(nums[i]);
        }
        return arraySet.size() != nums.length;
    }
}

LeetCode原题链接:leetcode-cn.com/problems/co…