217. 存在重复元素
题目来源:力扣(LeetCode)https://leetcode-cn.com/problems/contains-duplicate/
题目
给定一个整数数组,判断是否存在重复元素。
如果任意一值在数组中出现至少两次,函数返回 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
解题思路
思路:排序、哈希表
在这里,题目要求在给定的整数数组中,判断是否存在重复元素。
如果存在重复的元素,返回 True,否则返回 False。
排序
数组中的元素均为整数,那么可以根据值判断元素之间是否相等。由于数组原本并非有序的,那么可以先对数组进行排序,具体做法如下:
- 先对数组进行排序;
- 然后遍历数组,前后比较元素值是否相等:
- 相等,返回 True;
- 数组遍历完成后,元素均不相同,返回 False。
具体的代码实现如下。
class Solution:
def containsDuplicate(self, nums: List[int]) -> bool:
# 先对数组排序
nums.sort()
# 遍历数组,比较前后元素值
for i in range(len(nums)-1):
if nums[i] == nums[i+1]:
return True
return False
哈希表
此外,这里还可以使用哈希表的方法,不用先对数组进行排序。方法如下:
- 遍历数组,将数组中的元素添加到哈希表中。
- 如果元素已经存在于哈希表中,那么表示由重复 ,返回 True;否则返回 False。
这里使用集合 set,具体的代码实现如下。
class Solution:
def containsDuplicate(self, nums: List[int]) -> bool:
# 声明集合
s = set()
# 遍历数组,将元素添加到集合中
for num in nums:
# 若元素存在于集合中,表示存在重复元素
if num in s:
return True
s.add(num)
return False
其实,该题可以用一行代码进行实现。
根据 set() 去重的性质来删除重复数据,计算去重后集合的长度与原数组的长度进行比较。如果长度相同,那么表示无重复元素;否则表示有重复元素。代码如下。
class Solution:
def containsDuplicate(self, nums: List[int]) -> bool:
return len(nums) != len(set(nums))
欢迎关注
公众号 【书所集录】
若有错误,烦请指出,欢迎指点交流。