【Leetcode初级算法】4-存在重复
2018-07-19 本文已影响14人
小流
- 给定一个整数数组,判断是否存在重复元素。如果任何值在数组中出现至少两次,函数返回 true。如果数组中每个元素都不相同,则返回 false。
示例 1:
输入: [1,2,3,1]
输出: true
示例 2:
输入: [1,2,3,4]
输出: false
-
思路:
最简单的想法,第一个与后面所有其他元素比较是否相等,没有的话第二个,第三个……暴力破解法。
这样循环嵌套两次就做出来了,但是时间复杂度就到了O(n*n),一提交第5个case就超时了。 -
我第二个思考的方法就是先排序再去做比较,这样比较只要比两两相邻的数,因为相等肯定相邻。所以比较只要一次循环就能做完,复杂度高低取决于排序算法。
我自己没有去写排序(选也只能选合并排序),而是调用了Python内置sort方法,查了资料这个排序算法选择了TimeSort,是一种复杂度平均只有O(n*log(n))的高级算法。
原理可以参考: https://blog.csdn.net/yangzhongblog/article/details/8184707
我这里偷了个懒所以没什么价值。凑合看: -
附上Python代码:
class Solution(object):
def containsDuplicate(self, nums):
"""
:type nums: List[int]
:rtype: bool
"""
if len(nums) == 0 or len(nums) == 1:
return False
nums.sort()
i = 0
j = 1
while j < len(nums):
if nums[i] == nums[j]:
return True
i += 1
j += 1
return False
- 另有一种解法说可以用哈希表来做,后续再试试补充。