存在重复元素
给你一个整数数组 nums 。如果任一值在数组中出现 至少两次 ,返回 true ;如果数组中每个元素互不相同,返回 false 。
示例 1:
输入:nums = [1,2,3,1]
输出:true
解法:
1.排序比较
将数组排好序,然后进行两两对比,如果遇到一样的,便返回true。还有暴力求解,直接进行两两比对,只是求解效率低下,直接超时。
public boolean containsDuplicate(int[] nums) {
Arrays.sort(nums);
for(int i=1;i<nums.length;i++){
if(nums[i]==nums[i-1]){
return true;
}
}
return false;
}
暴力求解
public boolean containsDuplicate(int[] nums) {
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;
}
2.使用set集合
由于set集合中不容许出现相同元素,如果有则会覆盖之前的值,并返回false。遍历数组中所有元素,一个个添加到set集合中,在添加时如果返回false,则说明有重复元素,返回true。
public boolean containsDuplicate(int[] nums) {
Set<Integer> set=new HashSet<>();
for(int num:nums){
if(!set.add(num)){
return true;
}
}
return false;
}
将数组中所有元素添加到set集合中后,将其长度与nums数组对比,如果不相等,说明有重复元素,否则说明没有重复元素。但是效率没有上一种高。
public boolean containsDuplicate(int[] nums) {
Set<Integer> set=new HashSet<>();
for(int num:nums){
set.add(num);
}
return set.size()!=nums.length;
}