给你一个 升序排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。
不要使用额外的空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。
示例
输入:nums = [1, 1, 2, 2, 3, 3]
输出:2
补充:nums = [1, 2, 3, 2, 3, 3],取值 nums[:2+1]
解析
1)解题的关键还是在审题,注意数组是升序,且要求不能使用额外空间,原地修改
2)双指针问题,慢指针只有在出现新的元素的时候,才往前移动,且把快指针对应的元素赋值给慢指针
代码示例
def removeDuplicates(nums): i = 0 for num in nums: if nums[i] != num: i += 1 nums[i] = num # print(nums[:i+1]) return i+1 nums = [1,1,2,3,3] print(removeDuplicates(nums))
执行用时:32 ms , 在所有 Python3 提交中击败了 98.16% 的用户.
本文为 陈华 原创,欢迎转载,但请注明出处:http://ichenhua.cn/read/351