题目
不要使用额外的数组空间,你必须仅使用 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没有被删除, 请看:
这到底是为啥那???
nums.remove 之后数组长度变短了,循环的次数不够了。你可以在循环中把i打出来看看