今日算法题,涉及到常见简单的知识点,双指针,另外注意range数组越界的问题
1、给你一个 升序排列 的数组 nums
,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致
思路:
1,双指针解决
使用两个指针,右指针始终往右移动,
如果右指针指向的值等于左指针指向的值,左指针不动。
如果右指针指向的值不等于左指针指向的值,那么左指针往右移一步,然后再把右指针指向的值赋给左指针。
# nums = [1, 2, 3, 3, 9, 5, 5]
nums = [0,0,1,1,4]
class Solution:
def removeDuplicates(self, nums: List[int]) -> int:
for i in range(0,len(nums)-1):
if nums[i] == nums[i-1]:
del nums[i]
return len(nums)
出错结果
索引列表:
从0开始而不是1。当索引超出了范围时,Python会报一个IndexError错误,所以,要确保索引不要越界。
如果要取最后一个元素,除了计算索引位置外,还可以用-1做索引,直接获取最后一个元素。
修改为:
class Solution:
def removeDuplicates(self, nums) -> int:
for i in range(len(nums)-1,0,-1):
if nums[i] == nums[i-1]:
del nums[i]
return len(nums)
p = Solution()
nums = [0,0,1,1,4]
a = p.removeDuplicates(nums)
print(a)
#结果:
3
[0, 1, 4]
网友评论