每日一道演算法題--leetcode 26--刪除排序陣列中重複項--python

杉杉不要bug發表於2019-04-10

【題目描述】

每日一道演算法題--leetcode 26--刪除排序陣列中重複項--python
每日一道演算法題--leetcode 26--刪除排序陣列中重複項--python
【程式碼思路】

當函式的引數為list的時候是引用傳參,題幹要求必須在原地修改陣列,必須對nums這一變數直接操作,不可以生成新的變數,不可佔用超過O(1)的儲存空間,如果使用set函式,不是改變了nums自身,而是生成了一新的元素集,所以set函式在這道題裡不可用,開始我是考慮直接用set的。這裡只額外引入了一個變數j,佔用了一個儲存空間,空間複雜度為O(1)。

整體思路就是兩個指標,i和j,i從1開始遍歷整個list,j初始值為0,在迴圈中比較i,j所指向的元素,當元素數值不同的時候,j就向後自增1,將i的值複製給nums[j],最後返回j+1,就是不含重複元素的nums的前j個長度。

【原始碼】

class Solution(object):
    def removeDuplicates(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        j=0 
        for i in range(1,len(nums)):
            if nums[i]!=nums[j]:
                j+=1
                nums[j]=nums[i]     
        return j+1
複製程式碼

相關文章