【題目描述】數組
當函數的參數爲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
複製代碼