【题目描述】
【代码思路】当函数的参数为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
复制代码