Question
Given an array nums and a value val, remove all instances of that value in-place and return the new length.
Do not allocate extra space for another array, you must do this by modifying the input array In-place with O(1) extra memory. The order of elements can be changed.
It doesn’t matter what you leave beyond the new length.
Example :
Given nums = [3,2,2,3], val = 3,
Your function should return length = 2, with the first two elements of nums being 2.
It doesn’t matter what you leave beyond the returned length.
Python Code
class Solution:
def removeElement(self, nums: List[int], val: int) -> int:
if nums == []:
return 0
if val not in nums:
return len(nums)
p1,p2 = 0,len(nums)-1
while p1 <= p2:
if nums[p1] == val:
nums[p1],nums[p2],p2 = nums[p2],nums[p1],p2-1
else:
p1 += 1
return p1
## 如果提前把特殊情况考虑进去,则运行时间会小4ms
## 双指针,一头一尾,如果头部==val,则头尾交换,且尾部指针-1,否则头部指针向后移动
相关问题:283. Move Zeroes