给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。
示例 1:
输入:nums = [3,2,2,3], val = 3
输出:2, nums = [2,2]
解释:函数应该返回新的长度 2, 并且 nums 中的前两个元素均为 2。你不需要考虑数组中超出新长度后面的元素。例如,函数返回的新长度为 2 ,而 nums = [2,2,3,3] 或 nums = [2,2,0,0],也会被视作正确答案。
示例 2:
输入: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。注意这五个元素可为任意顺序。你不需要考虑数组中超出新长度后面的元素
方法一、暴力解题法
for方法
from typing import List
def removeElement(nums: List[int], val: int) -> int:
print(len(nums)-1)
for i in range(len(nums)-1,-1,-1):#倒序依次处理nums中的值
print("i is:",i)
if nums[i]==val:
print("--")
nums.remove(nums[i])
print(nums)
return len(nums)
nums = [0,1,2,2,3,0,4,2]
val = 2
# nums = [3,3]
# val = 3
# nums = [3]
# val = 3
b=removeElement(nums,val)
print(b)
while方法文章来源:https://www.toymoban.com/news/detail-675023.html
from typing import List
def removeElement(nums: List[int], val: int) -> int:
i = len(nums) - 1
while i >= 0:
if nums[i] == val:
nums.remove(nums[i])
i -= 1#此句不能写在if中,否则会死循环
return len(nums)
nums = [0,1,2,2,3,0,4,2]
val = 2
# nums = [3,3]
# val = 3
# nums = [3]
# val = 3
b=removeElement(nums,val)
print(b)
方法二、快慢指针
让快指针fast走前面,慢指针slow走后面,如果 fast 遇到值为 val 的元素,则直接跳过,否则就赋值给 slow 指针,并让 slow 前进一步
由于每次赋值后slow都前进了一步,所以最后满足条件的元素是nums[0…slow-1],所以题目要求返回删除后数组的长度,直接返回slow即可文章来源地址https://www.toymoban.com/news/detail-675023.html
from typing import List
def removeElement(nums: List[int], val: int) -> int:
s = f = 0
while f < len(nums):
if nums[f] != val:
nums[s] = nums[f]
s += 1#如果 fast遇到值为val 的元素,则直接跳过,否则就赋值给 slow 指针,并让 slow 前进一步
f += 1
print(nums)#不一定是删除val后的列表
return s#由于每次赋值后slow都前进了一步,所以最后满足条件的元素是nums[0...slow-1]
# 所以题目要求返回删除后数组的长度,直接返回slow即可
nums = [0,1,2,2,3,0,4,2]
val = 2
# nums = [3,3]
# val = 3
# nums = [3]
# val = 3
b=removeElement(nums,val)
print(b)
到了这里,关于力扣--数组类题目27. 移除元素的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!