您的位置:首页 > 大数据 > 人工智能

LeetCode: 008-Contains Duplicate

tang20120235 2015-12-30 23:46 78 查看

Contains Duplicate

恶补一点简单题。

如果列表中有两个重复数据,返回True,反之,返回False

基本思路

最简单的方法是调用sorted函数了,nlog(n)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)O(n)的,因为set 在实现的时候使用了hash查找。。。

难怪比排序快。

大概就是这三种办法了, O(n)O(n)的方法还是得用HashTable,

可怜我这一块都没学。。。

可能的额外任务

Python的HashTable生成?

直接用set吗?
标签: