Leetcode问题,以删除数组中值的实例

直美

说明是:

给定一个数组nums和一个值val,就地删除该值的所有实例并返回新的长度。

不要为另一个数组分配额外的空间,必须通过使用O(1)额外的内存就地修改输入数组来做到这一点。

元素的顺序可以更改。超出新长度后剩下的都无所谓。

这是我的解决方案,但它说我的输出返回的是数组的前两个元素,而不是后两个?

输入:[3,2,2,3]我的输出:[3,3]预期:[2,2]

def removeElement(self, nums, val):
    count = 0;
    for i in nums:
        if nums[i] == val:
            temp = nums[count]
            nums[count] = nums[i]
            nums[i] = temp

            count=count+1
    nums = nums[count:]
    return len(nums)
戈戈伦

尽管您对线性算法有正确的想法,但这里仍然存在一些问题。

for i in nums:,那么nums[i]在循环块中是一个常见的Python错误。它不会像您想象的那样遍历索引。实际上,它遍历元素!使用for i, element in enumerate(nums):for i in range(len(nums))获取索引。避免这种情况的一种好方法是永远不要i用于索引。调用它nnumelem使其更容易避免混乱。

另一个误解是nums = nums[count:]这根本不会修改呼叫者的列表数据,只会重新分配局部变量nums以指向呼叫者列表的副本,这不是您想要的。修改呼叫者列表的唯一方法是为每个索引分配一些内容。

一种简单的方法是遍历列表并将与目标不匹配的元素移动val到列表的前面。指针length位于i变量后面,指示结果的长度以及下一个选定项目的放置位置。

def removeElement(self, nums, val):
    length = 0

    for i in range(len(nums)):
        if nums[i] != val:
            nums[length] = nums[i]
            length += 1

    return length

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章