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
如果有不对的希望小伙伴们指点或者留言更优秀的解法