leetcode刷题记录-217存在重复元素

113 阅读1分钟

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。

leetcode217题,存在重复元素

前文

本文为菜鸟的刷题记录,仅用作笔记使用,并非最佳解决方案。

题目信息

给定一个整数数组,判断是否存在重复元素。 如果存在一值在数组中出现至少两次,函数返回 true 。如果数组中每个元素都不相同,则返回 false 。 https://leetcode-cn.com/problems/contains-duplicate/

解题思路分析

方案1

主要是暴力方案。暴力解法很容易想到,直接对数组进行遍历操作,同时在遍历时进行记录。如果同一元素出现了不止一次,那么证明数组中存在重复元素。同样的,如果没出现相同元素,那么可以认为数组中并不存在重复元素。

方案2

本方案主要是针对暴力解法的一种优化。主要思路为采用set类型的数据结构处理。由于在set数据结构中,同样的元素只能出现一次。因此选择将遍历的数据存储在set集合当中。如果集合当中已经存在了该元素,则数组存在重复元素。如果集合中不存在该元素,则将元素放入集合中。 本方案的简要代码如下:

    public boolean containsDuplicate(int[] nums) {
        HashSet<Integer> sets = new HashSet<>();
        for (int i = 0; i < nums.length; i++) {
            if(!sets.add(nums[i])){
                return true;
            }
        }
        return false;
    }

复杂度分析

主要针对上文提到的方案2。

  • 时间复杂度 o(N) N为数组长度
  • 空间复杂度 o(N) N为数组长度

后记

  • 千古兴亡多少事?悠悠。不尽长江滚滚流。