26.删除排序数组中的重复项
给定一个排序数组,你需要在**原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组**并在使用 O(1) 额外空间的条件下完成。
示例 :
给定 nums = [0,0,1,1,1,2,2,3,3,4],
函数应该返回新的长度 5, 并且原数组 nums 的前五个元素被修改为 0, 1, 2, 3, 4。
你不需要考虑数组中超出新长度后面的元素。
class Solution(object):
def removeDuplicates(self, nums):
# :type nums: List[int]
# :rtype: int
flag = 0 # 慢指针
for i in nums: # 遍历数组
if nums[flag] != i: # 若指针指向的元素与当前遍历数组的元素不同
flag += 1 # 慢指针后移一位
nums[flag] = i # 修改数组,用不同的元素占据重复元素的位置
return len(nums) and flag + 1
"""
主要用了“双指针法”,慢指针flag负责更新不同元素的位置,只有当碰到不同元素的时候才会更新。
而快指针i就简单了,它随着数组元素的遍历同步更新,每次向后移动一个位置,直到数组遍历完成。
该过程中,flag会记录新数组(最后需要的数组)元素的下标,同时将该元素占用之前重复元素的位置。
若相同则指针不动,数组继续往后遍历
注意考虑数组为空的情况(flag初始值为0,由于要求数组长度,故需要加1)
"""