每日一道算法题--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
复制代码
相关文章
相关标签/搜索