描述
給定一個整數陣列,判斷是否存在重複元素。
如果任何值在陣列中出現至少兩次,函式應該返回 true。如果每個元素都不相同,則返回 false。
實現
1.自己的方法,雙迴圈,但是題目提示超過時間限制了
class Solution(object):
def containsDuplicate(self, nums):
"""
:type nums: List[int]
:rtype: bool
"""
if len(nums)==0:
return False
else:
for i in range(len(nums)):
for j in range(len(nums)):
if nums[i]==nums[j] and i!=j:
return True
return False
2.後面又想到一種方法,先排序,對比前後兩個元素的值,如果存在相當就返回True。len(nums)-1因為取值i到倒數第二位就可以對比完,因為if 使用的是nums[i+1]
class Solution(object):
def containsDuplicate(self, nums):
"""
:type nums: List[int]
:rtype: bool
"""
nums.sort()
if len(nums) == (1 or 0):
return False
else:
for i in range(len(nums)-1) :
if nums[i] == nums[i+1]:
return True
return False
3.樓下有大神回覆了,看到一種比較簡答的優秀解法:對資料去重,如果長度變化,說明存在重複元素。
class Solution:
def containsDuplicate(self, nums):
"""
:type nums: List[int]
:rtype: bool
"""
return True if len(nums) != len(set(nums)) else False
4.樓下大神的字典解法:也很優秀,如果字典不存在陣列的值,就dict[i] =i
class Solution(object):
def containsDuplicate(self, nums):
if len(nums) == 0:
return False;
else:
dict = {}
for i in nums:
if dict.get(i) is not None:
return True
else:
dict[i] = i
return False