题目描述
给定一个整数数组,判断是否存在重复元素。
如果任何值在数组中出现至少两次,函数返回 true。如果数组中每个元素都不相同,则返回 false。
示例:
输入: [1,2,3,1]
输出: true
示例:
输入: [1,2,3,4]
输出: false
示例:
输入: [1,1,1,3,3,4,3,2,4,2]
输出: true
解答思路
转数据成不含重复元素的集合,如果长度不变,无重复元素;反之有重复元素。
翻译如下:
class Solution(object):
def containsDuplicate(self, nums):
"""
:type nums: List[int]
:rtype: bool
"""
if len(set(nums))==len(nums):
return False
return True
结果:
执行用时 : 156 ms, 在Contains Duplicate的Python提交中击败了59.00% 的用户
内存消耗 : 17.2 MB, 在Contains Duplicate的Python提交中击败了21.95% 的用户
提交时间 | 状态 | 执行用时 | 内存消耗 | 语言 |
几秒前 | 通过 | 156 ms | 17.2MB | python |
优化解答
class Solution(object):
def containsDuplicate(self, nums):
"""
:type nums: List[int]
:rtype: bool
"""
return not len(set(nums))==len(nums)
结果:
执行用时 : 152 ms, 在Contains Duplicate的Python提交中击败了95.73% 的用户
内存消耗 : 17.1 MB, 在Contains Duplicate的Python提交中击败了31.28% 的用户
提交时间 | 状态 | 执行用时 | 内存消耗 | 语言 |
几秒前 | 通过 | 152 ms | 17.1MB | python |
下面是一些尝试:
无限长度滑动窗口
class Solution(object):
def containsDuplicate(self, nums):
"""
:type nums: List[int]
:rtype: bool
"""
#定义滑动窗口
se = set()
i, j = 0, -1
while j+1 < len(nums):
#是否在窗口中
if nums[j+1] in se:
return True
#窗口后移
se.add(nums[j+1])
j+=1
return False
结果:
执行用时 : 164 ms, 在Contains Duplicate的Python提交中击败了29.62% 的用户
内存消耗 : 17.2 MB, 在Contains Duplicate的Python提交中击败了27.70% 的用户
提交时间 | 状态 | 执行用时 | 内存消耗 | 语言 |
几秒前 | 通过 | 164 ms | 17.2MB | python |
提交时间 | 状态 | 执行用时 | 内存消耗 | 语言 |
几秒前 | 通过 | 160 ms | 17MB | python |