题目来源:力扣(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标记(移动的终点仅做演示用)


该博客主要讨论了如何在不使用额外空间的情况下,通过原地修改输入数组,移除所有等于特定值的元素。提供的解决方案是遍历数组,遇到目标值时将后续元素前移并更新计数器,最终返回新数组的长度。此问题来源于LeetCode和牛客网的在线编程挑战。
762

被折叠的 条评论
为什么被折叠?



