题目来源(力扣. - 力扣(LeetCode)简单)
解题思路:
法一:排序后遍历
每次与后一项对比是否相同,若有相同的则返回true,结束循环。若最后无相同的,则返回false
法二:去重对比长度
将数组的值输入set集合,与原来的对比长度,若相同则无重复的,返回false,否则返回true
优化:在添加时开始判断,添加失败则说明有重复的数字,此时已可以返回true并结束添加
代码实现:(代码直接复制可能有空格格式问题)
法一:
nums.sort()
for i in range(len(nums)-1):
if nums[i]==nums[i+1]:
return True
return False
法二:
if len(set(nums)) != len(nums):
return True
else:
return False
优化后:
pre = set()
for num in nums:
if num in pre:
return True
pre.add(num)
return False
总结:
暴力遍历法耗时长,关于重复问题可以考虑set的去重属性,再观察相同属性,若相同则排序后数字一定在相邻位置,因此也可以用排序后遍历的方法来做。尽力考虑题目的多解,考虑数据量大时的优化方法。