LeetCode新手数组里面的题, 移除元素?

新手上路,请多包涵

题目

不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。

元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。

示例:

输入:nums = [0,1,2,2,3,0,4,2], val = 2
输出:5, nums = [0,1,4,0,3]
解释:函数应该返回新的长度 5, 并且 nums 中的前五个元素为 0, 1, 3, 0, 4。注意这五个元素可为任意顺序。你不需要考虑数组中超出新长度后面的元素。

作者:力扣 (LeetCode)
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

题目来源及自己的思路

class Solution:

def removeElement(self, nums: List[int], val: int) -> int:
    for i in nums:
        if i == val:
            nums.remove(i)
    
    # 如果加上下面两行代码,会报错,我也不知道为啥"超出范围""
    # if nums[-1]  == val:
    #     nums.remove(nums[-1])

    # 这里最后的一个2 没有被消除
    return len(nums)

但是我在检测的时候, LeetCode给出的检测中,最后一个2没有被删除, 请看:
image.png

这到底是为啥那???

阅读 1.5k
2 个回答
for i in nums:
        if i == val:
            nums.remove(i)

nums.remove 之后数组长度变短了,循环的次数不够了。你可以在循环中把i打出来看看

图片.png
你把每次循环的当前值打印出来就知道怎么回事了。既然是原地修改数组,那么当你移除时,下一个值的位置已经变了,这样你就会跳过下一个值

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题