题目描述:
给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。
不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。
元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。
解题思路:
遍历数组==》遇到目标值==》后面的数组顺序往前进位==》同时缩小边界值,并且在此处原地检验一次(i不加1,因为前进来的一位也有可能是目标值)==》遍历结束后,返回lens(lens长度一直在实时更新)
class Solution:
def removeElement(self, nums: List[int], val: int) -> int:
lens=len(nums)
i=0
while(i < lens): #遍历,有效数组长度lens在更新
if nums[i]==val: #确认目标值
for j in range(i,lens-1):
nums[j]=nums[j+1] #将i点后一位开始的有效数组往前移动,覆盖掉nums[i]
lens-=1 #有效数组长度-1,更新边界长度
continue #重新检验新的nums[i],直接跳出本次循环
i+=1
return lens #返回的lens一直在动态更新
这是正儿八经的移除元素解法了吧~~~
对比上一题(283.移除0),直接使用了python的内置函数~~~
慢慢来,不要莽,加油!