题目
给你一个数组 nums 和一个值 val,你需要原地移除所有数值等于val的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用O(1)额外空间并原地修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。
方法一
class Solution(object):
def removeElement(self, nums, val):
i = 0
size = len(nums)
while i < size:
if nums[i] == val:
j = i + 1
while j < len(nums):
nums[j-1] = nums[j]
j = j + 1
i = i - 1
size = size - 1
i = i + 1
return size
方法二:双指针
通过一个快指针和慢指针在一个for循环下完成两个for循环的工作。
class Solution(object):
def removeElement(self, nums, val):
slow, fast = 0, 0
while fast < len(nums):
if nums[fast] != val:
nums[slow] = nums[fast]
slow = slow + 1
fast = fast + 1
return slow
参考
代码相关:https://programmercarl.com/
Leetcode官方解题