217.存在重复元素
给定一个整数数组,判断是否存在重复元素。
如果存在一值在数组中出现至少两次,函数返回 true 。如果数组中每个元素都不相同,则返回 false 。
示例 1:
输入: [1,2,3,1]
输出: true
示例 2:
输入: [1,2,3,4]
输出: false
示例 3:
输入: [1,1,1,3,3,4,3,2,4,2]
输出: true
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/contains-duplicate
(限于初学者交流,侵删!)
解题思路与代码(Python)
class Solution:
def containsDuplicate(self, nums: List[int]) -> bool:
'''思路1:先将数组排序,再用两重循环进行比较查找。
时间复杂度为O(n*n),提交显示超时!!!'''
nums.sort()
n = len(nums)
if n == 0:
return False
for i in range(n):
r = i+1
while(r<n):
if nums[r] == nums[i]:
return True
r += 1
return False
'''思路1改进(依照官方的思路),先将数组排序,
然后判断相邻的两个数是否重复。时间复杂度为n'''
nums.sort()
n = len(nums) - 1
for i in range(n):
if nums[i] == nums[i+1]:
return True
else: #注意此处else的写法,并不是与if对应,而是在for执行完后执行else
return False
'''思路2:建立一个空数组,不断往里加入新元素,
若发现有相同,则返回true,否则返回false。'''
'''时间复杂度依然很高'''
array = []
n = len(nums)
for i in range(n):
if nums[i] not in array:
array.append(nums[i])
else:
return True
return False
'''另一个巧妙的思路,来自于题友,运用了集合'''
return len(nums) != len(set(nums))