方法一:
使用set直接去重
a=[2,2,1,3,1]
def quchong(arr):
return list(set(arr))
print(quchong(a))
方法二:
使用字典的key去重
a=[2,2,1,3,1]
def quchong(arr):
a={}
a = a.fromkeys(arr)
return list(a)
print(quchong(a))
方法三:
使用python语言手写一个去重
a=[2,2,1,3,1]
def quchong(arr):
s=[]
for i in arr:
if i not in s:
s.append(i)
return s
print(quchong(a))
方法四:
三中开辟了额外的空间不是本地修改,写一个本地修改的
思路:参考插入选择排序的思想,设置两个指针,一个记录没有重复的位置,一个记录,末尾重复的位置,每次把重复的放到最后。
a=[2,2,1,3,1]
def quchong(arr):
p=0
g=len(arr)-1
for j in range(1,len(arr)):
i=j-1
while i>=0 and j<=g:
if a[j]==a[i]:
a[j],a[g]= a[g],a[j]
g-=1
i=j
i-=1
if j<=g:
p+=1
return arr[:p+1]
print(quchong(a))
方法五:
方法四中虽然可以去重,却是不稳定的,他改变了数字的相对位置,所以针对这个在进行优化。
思路:和上边一样,只是每次不交换,而是直接覆盖掉
class Solution(object):
def removeDuplicates(self, nums):
n = len(nums)
if n <= 1:
return len(nums)
i = 0
j = 1
while j= 0:
if nums[k] != nums[j]:
k -= 1
else:
break
if k<0:
i+=1
nums[i] = nums[j]
j+=1
return len(nums[:i+1])
print( Solution().removeDuplicates([0,0,1,1,1,2,2,3,3,4]))
方法六:如果是排序数组,见leecode 26题可以使用,后边的往前覆盖
class Solution(object):
def removeDuplicates(self, nums):
n= len(nums)
if n <= 1:
return n
j = 0
for i in range(1,n):
if nums[j]!=nums[i]:
j+=1
nums[j]=nums[i]
return len(nums[:j+1])
print( Solution().removeDuplicates([0,0,1,1,1,2,2,3,3,4]))
执行结果:
通过
显示详情
执行用时 :80 ms, 在所有 Python 提交中击败了94.00%的用户
内存消耗 :13.5 MB, 在所有 Python 提交中击败了32.71%的用户
leecode 80题:
给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素最多出现两次,返回移除后数组的新长度。
不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。
class Solution(object):
def removeDuplicates(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
n= len(nums)
if n <= 1:
return n
j = 0
renei= 1
for i in range(1,n):
if nums[j]!=nums[i]:
j+=1
nums[j]=nums[i]
renei = 1
elif renei!=0:
j += 1
nums[j] = nums[i]
renei -= 1
return len(nums[:j+1])
print( Solution().removeDuplicates([0,0,1,1,1,2,2,3,3,4,5,5,5]))