每日一道算法題--leetcode 26--刪除排序數組中重複項--python

【題目描述】數組

【代碼思路】

當函數的參數爲list的時候是引用傳參,題幹要求必須在原地修改數組,題乾的說明中已經寫明,removeDuplicates函數返回長度len,最終輸出的時候是直接打印前len個nums值bash

for (int i=0;i<len;i++){
    print(nums[i]);
}
複製代碼

因此咱們必須對nums這一變量直接操做,不能夠生成新的變量,不可佔用超過O(1)的存儲空間。一開始我考慮直接用set函數,可是若是使用set函數,不是改變了nums所在的內存空間,而是生成了一新的元素集,開闢了新的內存空間,和題幹中要求的空間複雜度O(1)也不符合,因此set函數在這道題裏不可用。所以咱們這裏只額外引入了一個變量j,佔用了一個存儲空間,空間複雜度爲O(1)。函數

總體思路就是雙指針,i和j,i從1開始遍歷整個list,j初始值爲0,在循環中比較i,j所指向的元素,當元素數值不一樣的時候,j就向後自增1,將nums[i]賦值給nums[j],最後返回j+1,就是不含重複元素的nums的元素長度,即前j+1個元素。ui

【源代碼】spa

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
複製代碼
相關文章
相關標籤/搜索