题目
给你一个整数数组 nums
。如果任一值在数组中出现 至少两次 ,返回 true
;如果数组中每个元素互不相同,返回 false
。
解法一
思路
- HashSet
代码1
public boolean containsDuplicate(int[] nums) {
Set<Integer> set = new HashSet<>();
for (int num : nums) {
// 充分利用返回值
if (!set.add(num)) {
return true;
}
}
return false;
}
- 复杂度
- 时间复杂度:O(n)
- 空间复杂度:O(n)
- 上面代码执行耗时5ms,击败90%
代码2
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;
}
- 复杂度
- 时间复杂度:O(n)
- 空间复杂度:O(n)
- 上面代码执行耗时7ms,击败72%
解法二
思路
- 排序
代码
public boolean containsDuplicate(int[] nums) {
Arrays.sort(nums);
int n = nums.length;
for (int i = 0; i < n - 1; i++) {
if (nums[i] == nums[i+1]) {
return true;
}
}
return false;
}
复杂度
-
时间复杂度:O(nlogn)
-
空间复杂度:O(logn) sort使用快速排序,有递归