數組去重大全(python)

方法一:

使用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]))

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章