力扣打卡题 L217

L217题
在这里插入图片描述

一:写题前想出所有解法比较时空复杂度选择最优的写出
二:首先暴力就不用写了,去想比暴力更好的解法写
三:写出题解后,去看更优秀的题解吸收
四:最后复习不断的去重复刷


第一种:

public static boolean containsDuplicate(int[] nums) {
    
    
      	// 思路一:
		// 先将数组填入Set中,用Set去重
		// 判断两个长度是否相等,如果不等则是有重复
		Set<Integer> set = new HashSet<Integer>();
		for (int i = 0; i < nums.length; i++) {
    
    
			set.add(nums[i]);
		}
		if(set.size() != nums.length)
			return true;
		return false;
    }

第二种:
public static boolean containsDuplicate(int[] nums) {
    
    
		// 思路二:
		// 暴力优化:用sort排序,遍历一遍
		// 判断出现相邻的两个有相等的 返回有重复
		Arrays.sort(nums);
		for (int i = 1; i < nums.length; i++) {
    
    
			if(nums[i-1] == nums[i])
				return true;
		}
		return false;
    }

我认为第一种比第二种复杂度低,因为还没有系统的学习过分析时空复杂度,所以我现在的理解是第一种时间复杂度O(n)
第二种时间复杂度是 n log n


如果有不对的希望小伙伴们指点或者留言更优秀的解法

猜你喜欢

转载自blog.csdn.net/weixin_45765795/article/details/111088961