一、题目描述
二、题目理解及提交代码
想起之前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
包含方法
addcontainsisEmpty等
Set 和 List 区别是 Set的元素不能重复,List的元素可以重复,如果Set中添加存在的元素,会失败,返回false