题目:
给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。
不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。
原始程序:
def removeDuplicates(self, nums: List[int]) -> int:
l=len(nums)
a1=0
a2=1
while a2<l:
if nums[a1]==nums[a2]:
nums.pop(a2)
a1+=1
a2+=1
问题:在循环之前确定了 l=len(nums) ,而在循环过程中,数组的长度会减小,因此会产生 IndexError: list index out of range 数组越界问题
修改:
每次循环都重新计算长度
def removeDuplicates(self, nums: List[int]) -> int:
a1=0
a2=1
while a2<len(nums):
if nums[a1]==nums[a2]:
nums.pop(a2)
a1+=1
a2+=1
重新提交:
解决方法:
当找到并删除一个重复数字后,指针不进行+1,立即开始下一次相等判断
class Solution:
def removeDuplicates(self, nums: List[int]) -> int:
a1=0
a2=1
while a2<len(nums):
if nums[a1]==nums[a2]:
nums.pop(a2)
continue
a1+=1
a2+=1