题目来源:力扣(LeetCode)和牛客网在线编程题
链接:https://leetcode-cn.com/problems
https://www.nowcoder.com/activity/oj
特别鸣谢:来自夸夸群的 醉笑陪公看落花@知乎,王不懂不懂@知乎,QFIUNE@csdn
感谢任老师倾囊相授,感谢小伙伴们督促学习,一起进步
给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。
不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。
元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/remove-element
tips:
- 遇到需要删除的元素,数组后面的内容向前移动
- 找到终止条件 count+i == n ,结束循环
def removeElement(self, nums: List[int], val: int) -> int:
n = len(nums)
count = 0
i = 0
while(i+count<n):
if nums[i] == val:
for j in range(i,n-1-count):
nums[j] = nums[j+1]
nums[n-1-count] = val-1
count += 1
i -=1
i+=1
return n-count
解题草稿
删除元素之后,后面的内容向前移动,为了方便演示移动的终点,用val-1标记(移动的终点仅做演示用)