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.
class Solution(object):
def removeElement(self, nums, val):
"""
:type nums: List[int]
:type val: int
:rtype: int
"""
start, end = 0, len(nums)-1
while start<=end:
if nums[start]==val:
nums[start], nums[end], end = nums[end], nums[start], end-1
else:
start += 1
return start
1 注意是in-place修改,而且是O(1)extra memory
2 采用双指针,一个指向开头,一个指向结尾。从array最开始遍历,如果遇到和target相等的数,就和尾指针所指的数swap,同时尾指针也要向前挪一位
3 当头指针和尾指针指在同一个位置的时候,说明已经遍历完毕,由于尾指针后面所有的都是交换过的,也就是target value
4 定义双指针的时候,我们一般就在最开始就定义了
5 为什么是while start<=end而不是while start<end,因为两个是有可能相遇的