Contains Duplicate
恶补一点简单题。
如果列表中有两个重复数据,返回True,反之,返回False
基本思路
最简单的方法是调用sorted函数了,nlog(n)级别。
感觉我在平时写脚本的时候,这个问题碰到得相当多,需要仔细学习一下。
基本解法
当然是用sorted啦
class Solution(object):
def containsDuplicate(self, nums):
ord_nums = sorted(nums)
for i in xrange(len(ord_nums)-1):
if ord_nums[i] == ord_nums[i+1]:
return False
return True
这玩意居然是56ms的。。。
老实说这是我短时间内想出来最快的方案了。
机智解法
看到discuss里有一个非常机智的解法。
我的思路局限在了找出不同的两个数。
这个解法直接从全局角度解决了这个问题。
class Solution(object):
def containsDuplicate(self, nums):
if len(nums) != len(set(nums)):
return True
return False
中华儿女多奇志。
我的这种写法比discuss里的写法要快。。。。。
以后还是采用直接return value的方法吧:D
原始写法
class Solution(object):
def containsDuplicate(self, nums):
return len(nums) != len(set(nums))
还有用集合的
class Solution(object):
def containsDuplicate(self, nums):
s = set()
for num in nums:
if num in s: return True
else: s.add(num)
return False
这样是O(n)的,因为set 在实现的时候使用了hash查找。。。
难怪比排序快。
大概就是这三种办法了, O(n)的方法还是得用HashTable,
可怜我这一块都没学。。。
可能的额外任务
Python的HashTable生成?
直接用set吗?