54.存在重复元素

给你一个整数数组 nums 。如果任一值在数组中出现 至少两次 ,返回 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;
    }
}
/*时间复杂度 : O(n \log n)O(nlogn)。即排序的时间复杂度。扫描的时间复杂度 O(n)O(n) 可忽略。

空间复杂度 : O(1)O(1)。 没有用到额外空间。如果深究 Arrays.sort(nums) 使用了栈空间,那就是 O(\log n)O(logn)。

方法二 使用 set
遍历数组,数字放到 set 中。如果数字已经存在于 set 中,直接返回 true。如果成功遍历完数组,则表示没有重复元素,返回 false。
*/
class Solution {
    public boolean containsDuplicate(int[] nums) {
        Set<Integer> set = new HashSet<>();
        for (int num: nums) {
            if (set.contains(num)) {
                return true;
            }
            set.add(num);
        }
        return false;
    }
}
/*
方法二之炫技
这题可以一行代码解决。
Java 可以用 stream 实现一行将 int[] 转成 Set<Integer> 。为了更简短一些,可以直接利用 stream 的 distinct 和 count 算子。
如果使用 Python 那更简单: len(set(nums)) != len(nums)。
*/
class Solution {
    public boolean containsDuplicate(int[] nums) {
        return IntStream.of(nums).distinct().count() != nums.length;
    }
}
//时间复杂度 : O(n)O(n)

//空间复杂度 : O(n)O(n)

 

posted @ 2022-03-15 09:27  随遇而安==  阅读(43)  评论(0编辑  收藏  举报