方法一:
使用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<n:
k=i
while k >= 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]))