给定一个整数数组,判断是否存在重复元素。
如果任何值在数组中出现至少两次,函数返回 true。如果数组中每个元素都不相同,则返回 false。
示例
输入: [1,2,3,1]
输出: true
输入: [1,2,3,4]
输出: false
方法一:两重循环遍历
遍历两次这个数组,for循环里再套一层循环,第二次遍历数组去判断是否存在数字和第一次遍历的数组相等,这个比较好理解
for (int i = 0; i < nums.length; i++) {
for (int j = i + 1; j < nums.length ; j++) {
if (nums[i] == nums[j]){
return true;
}
}
}
return false;
时间复杂度:O(N^2)
方法二:排序算法
将数组排序,排序后,重复的数字就会相邻,只要遍历一次既可以
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(Nlog(N))
方法三:哈希表
第三种方法,我们可以采用哈希表来解决
class Solution {
public boolean containsDuplicate(int[] nums) {
Set<Integer> set = new HashSet<>();
for(int x : nums){
if(set.contains(x)){
return true;
}
set.add(x);
}
return false;
}
}
时间复杂度:O(N)
因为要遍历一次数组
空间复杂度:O(N) 哈希表占用的空间和元素是呈线性关系的