Solution for Remove Element

Remove Element

给出的数组nums和数值val,在满足o(1)空间复杂度的前提下,计算出删除val后剩余数组的长度len,要求处理后的数组前len个元素不包含val

题目比较简单,但是有些隐藏的陷阱:

  • 遍历数组的同时删除元素,不能采用for循环进行,否则如果出现两个以上相等的元素,遍历时会跳过删除后前移的元素,如
for i,n in enumerate(nums):
    if n == val:
        del nums[i] #删除元素后,数组后面列表元素自动前移,如果删除前nums[i+1] == val,那么删除后这个val自动移动到了nums[i]的位置,但是循环已经认为这个位置的元素处理过了不会再重复处理
return len(nums)
  • 解决方案1:使用while循环和下标,控制遍历过程:
i = 0
while(i < len(nums)):
    if nums[i] == val:
        del nums[i]
    else:
        i = i + 1
return len(nums)

在遍历时使用下标i控制遍历过程,如果匹配到了要删除的元素,下标i的值不自增,可以解决上面描述的遍历问题

  • 解决方案2:使用数组的remove()方法
for i in range(nums.count(val)):
    nums.remove(val)
return len(nums)