【題目描述】
【程式碼思路】當函式的引數為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
複製程式碼