刪除一個數組中某一特定數值的元素,返回刪除後的數組長度。
注意點:
操作結束後的數字排列順序不需要與之前相同 超出返回長度的部分不需要處理例子:
輸入: nums [1, 2, 3, 4, 3, 2, 1],val = 1
輸出: 5
左右兩個指針向中間靠攏,左指針找到一個等於val的值,右指針找到第一個不等於val的值,把右指針指向的值賦值給左指針。繼續向中間靠攏。
class Solution(object):
def removeElement(self, nums, val):
"""
:type nums: List[int]
:type val: int
:rtype: int
"""
left = 0
right = len(nums) - 1
while left <= right:
while left <= right and nums[left] != val:
left += 1
while left <= right and nums[right] == val:
right -= 1
if left < right:
nums[left] = nums[right]
left += 1
right -= 1
return right + 1
if __name__ == "__main__":
assert Solution().removeElement([1, 2, 3, 4, 3, 2, 1], 1) == 5
assert Solution().removeElement([2], 3) == 1