leetcode-217-containsDuplicate


LeetCode-217-ContainsDuplicate

217存在重复元素

题目描述

给你一个整数数组 nums 。如果任一值在数组中出现 至少两次 ,返回 true ;如果数组中每个元素互不相同,返回 false

示例

示例 1:

输入:nums = [1,2,3,1]
输出:true
示例 2:

输入:nums = [1,2,3,4]
输出:false
示例 3:

输入:nums = [1,1,1,3,3,4,3,2,4,2]
输出:true


提示:

1 <= nums.length <= 105
-109 <= nums[i] <= 109

题解一:


    /**
     * 思路:
     *      根据set.add的特性
     *      如果集合没有该值添加成功并返回false
     *      如果集合已存在该值返回false
     * @param nums 数组
     * @return 是否存在重复元素
     */
    public boolean containsDuplicate1(int[] nums) {
        if (nums == null || nums.length <= 1) {
            return false;
        }
        Set dic = new HashSet<>(nums.length);
        for (int num : nums) {
            if (!dic.add(num)) {
                return true;
            }
        }
        return false;
    }

题解二:

    /**
     * 思路:
     *      1. 先快排对数组进行排序
     *      2. 如果紧邻两个元素相等,则包含重复元素
     *      时间复杂度O(NlogN), 空间复杂度(logN)
     * @param nums 数组
     * @return 是否存在重复元素
     */
    public boolean containsDuplicate2(int[] nums) {
        if (nums == null || nums.length <= 1) {
            return false;
        }
        Arrays.sort(nums);
        for (int i = 1; i < nums.length; i++) {
            if (nums[i] == nums[i-1]) {
                return true;
            }
        }
        return false;
    }

题解三:

/**
 * 思路:
 * 利用Java的Stream流工具,但是效率低,不建议
 *
 * @param nums 数组
 * @return 是否存在重复元素
 */
public boolean containsDuplicate3(int[] nums) {
    if (nums == null || nums.length <= 1) {
        return false;
    }
    return IntStream.of(nums).distinct().count() < nums.length;
}

文章作者: Tariq
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Tariq !
  目录