LeetCode存在重复元素
题目:判断列表中是否存在相同元素
解法:4种
推荐:方法3
语言:python
题目介绍如下:
题目通俗说明:
给定一个没有顺序的列表,如果列表中有相同元素就返回True,没有则返回False
解法如下:
# author:铁臂阿童木
# datetime:2022/1/26 10:52
# software: PyCharm
# 先定义两个条件列表
nums1 = [1,2,3,4,5,6]
nums2 = [2,1,3,4,4]
# 序号:方法一(最容易想到的方法)
# 方法:两次循环方法(脚踏两只船未遂法)
# 思想:i层循环先选定列表中一个元素,j层再去找此元素后面有没有和此元素相同的元素
# 优点:方法直接
# 缺点:耗时
def containsDuplicate(nums):
i = 0
j = 1
n = len(nums)
while (i < n-1): # 因为j层循环要去找i层循环选中元素后面的元素,所以i层循环选定元素的下标只要到n-1即可
while (i+j < n):
if(nums[i+j] == nums[i]): # nums[i]是i层循环选中的元素
return True # 如果找到相同元素直接返回True
else:
j += 1 # 没找到就继续进行j层循环与i层循环选中的元素进行比对
i += 1 # j层循环中没找到与i层循环选定元素相等的值,i层循环选定下一位的元素
j = 1 # 此处必须将j重置为1否则,无法进行第一层循环
return False # 如果最终没找到相同元素,即返回False
print(containsDuplicate(nums2))
# 序号:方法二
# 方法:排序比对方法
# 思想:先对列表进行排序得到有序的列表,再对列表中前后元素进行分别对比
# 优点:方法直接
# 缺点:比方法一省时间
def containsDuplicate2(nums):
nums.sort() # 先进行排序
i = 1
n = len(nums)
while (i<n):
if(nums[i] == nums[i-1]): # 相邻位置进行比对
return True # 相等直接返回True
i += 1 # 不相等就继续循环,对下个元素与它的前一个元素进行比对
return False # 如果最终没找到相同元素,即返回False
print(containsDuplicate2(nums2))
# 序号:方法三
# 方法:集合中元素唯一特性法
# 思想:利用集合中元素唯一的特性,将列表转换成集合,再对原列表和集合的长度进行对比
# 优点:省时间
# 缺点:一次将列表所有元素转换到集合中,如果列表中元素繁多,就浪费内存(方法四思想上对此方法做了优化)
def containsDuplicate3(nums):
return (len(nums) != len(set(nums))) # 判断转换成集合的列表长度是否与原列表一致
print(containsDuplicate3(nums2))
# 序号:方法四
# 方法:集合中元素唯一特性法
# 思想:利用集合中元素唯一的特性,将列表中元素逐个复制到集合,每一次都对复制之前和复制之后的集合长度进行比较
# 优点:比方法三省空间
# 缺点:每次循环都要测长度,效率低
def containsDuplicate4(nums):
s = set()
i = 0
n = len(nums)
nums.sort() # 先对数组排序
while i < n :
o_s = len(s)
s.add(nums[i]) # 将列表中元素复制到集合中,如果集合中已经有此元素,集合的长度不会改变
n_s = len(s)
if (o_s == n_s): # 判断长度是否改变
return True # 如果不变则证明出现重复元素
else:
i += 1
return False
print(containsDuplicate4(nums2))
经验:
如果自己编写中出现错误,就针对简单示例数据进行测试,使用编译器的调试工具打断点测试!
感谢阅读!!!
有错误请您指出!!!
欢迎补充!!!