每日一题-数组 *leetcode217

117 阅读1分钟

一、题目描述

二、题目理解及提交代码

想起之前leetcode1 两数之和的问题,因为不涉及找到重复元素的索引,考虑用list集合判断重复元素,代码比较简单,就不贴图了。

三、存在问题

list的contains()方法需要遍历所有集合元素,时间复杂度为O(n),超过时间限制

四、优解思路

使用HashSet集合,contains()方法是通过查找HashMap的KeySet来实现的,直接通过hash值确定元素位置,不需要从头遍历,时间复杂度为O(1)。

五、优解代码

class solution{
    public boolean containsDuplicate(int[] nums) {
        Set<Integer> set = new HashSet<>(nums.length);
        for(int x:nums){
            if(set.contains(x)) return true;
            set.add(x);
        }
        return false;
    }
}

六、注意事项

set的定义格式,在()中确定set大小。

七、数据结构

Set集合继承Collection 包含方法

add contains isEmpty

Set 和 List 区别是 Set的元素不能重复,List的元素可以重复,如果Set中添加存在的元素,会失败,返回false