题目描述:
给定一个整数数组,判断是否存在重复元素。
如果任何值在数组中出现至少两次,函数返回 true。如果数组中每个元素都不相同,则返回 false。
示例 1: 输入: [1,2,3,1] 输出: true
示例 2: 输入: [1,2,3,4] 输出: false
示例 3: 输入: [1,1,1,3,3,4,3,2,4,2] 输出: true
解题思路:
1、看到这道题,第一个想法是首先要判断数组的长度,如果数组的长度小于2则一定不存在重复的元素
2、第一种解题思路:将使用双重for循环进行遍历判断是否有相同的元素
3、第二种解题思路:优化将双重循环改为一层循环,使用数组自带的排序算法,把题转换为排序数组中的重复项
4、第三种解题思路:利用HashSet不允许重复元素的特性来判断是有相同的元素
下面来分别进行实现:
第一种解题思路代码:双重for循环进行遍历判断是否有相同的元素
方法的优点:容易想出解题思路
方法的缺点:执行时间效率不高,会出现超时的现象
class Solution {
public boolean containsDuplicate(int[] nums) {
if(nums.length<=0||nums==null) {
return false;
}
boolean a = false;
for (int i = 0; i < nums.length-1; i++) {
for (int j = i+1; j < nums.length; j++) {
if(nums[i]==nums[j]){
a = true;
}
}
}
return a;
}
}
第二种解题思路:优化将双重循环改为一层循环,使用数组自带的排序算法,把题转换为排序数组中的重复项
方法的优点:代码实现简单
class Solution {
public boolean containsDuplicate(int[] nums) {
if(nums.length<=0||nums==null) {
return false;
}
Arrays.sort(nums);
for (int i = 0; i < nums.length-1; i++) {
if(nums[i]-nums[1+i]==0) {
return true;
}
}
return false;
}
}
第三种解题思路:利用HashSet不允许重复元素的特性来判断是有相同的元素
方法的优点:可以判断多种类型的重复元素(不仅仅是数字)
方法的缺点:执行的效率不高,比较消耗内存
class Solution {
private Set save = new HashSet();
public boolean containsDuplicate(int[] nums) {
if(nums.length<=0||nums==null) {
return false;
}
for(int a : nums){
if(!save.add(a))return true;
}
return false;
}
}