1、题目
给你一个 升序排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。【双指针解决】
2、题解
from typing import List
class Solution:
def removeDuplicates(self, nums: List[int]) -> int:
# 腾哥题解1 - 双指针
if not nums:
return 0
slow = 1
for fast in range(1, len(nums)):
if nums[fast] != nums[fast-1]:
nums[slow] = nums[fast]
slow += 1
return slow
# 腾哥题解2 - 持续pop删除最后一个元素
for i in reversed(range(1, len(nums))):
if nums[i] == nums[i-1]:
nums.pop(i)
# 官网题解
# if not nums:
# return 0
# fast = slow = 1
# while fast < len(nums):
# if nums[fast] != nums[fast - 1]:
# nums[slow] = nums[fast]
# slow += 1
# fast += 1
#
# return slow
# 花菜
# slow = 0
# fast = 1
# while fast < len(nums):
# if nums[fast] != nums[slow]:
# slow += 1
# nums[slow] = nums[fast]
# fast += 1
# return slow + 1
if __name__ == '__main__':
nums = [1, 1, 2,6,7,8,9,9,10,11,11]
a = Solution()
print(a.removeDuplicates(nums))
3、双指针
指针就是内存地址
采用双指针解决,
fast为快指针,遍历数组到达的下标位置
slow为慢指针,下一个不同元素要填入的下标位置