存在重复(三种解法)——leetcode

题目描述:

给定一个整数数组,判断是否存在重复元素。
如果任何值在数组中出现至少两次,函数返回 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;
    }
}
发布了62 篇原创文章 · 获赞 21 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/lsy_666/article/details/104870828
今日推荐