題目描述

給定一個數組nums和一個值val,你需要原地移除所有數值等於val的元素,返回移除後數組的新長度。

時間複雜度為O(1),不用考慮移除後的數組順序

解題思路

  1. 可先定義好一個指針,拿來加上長度,並用for判別是否為val,最後返回指針長度

  2. 使用雙指針,快的指針去負責遍歷整個list,慢的指針去紀錄是否有遇到題目給的值,是的話就跳過,最後返回slow

Python

class Solution:
    def removeElement(self, nums: List[int], val: int) -> int:
        ptr = 0
        for num in nums:
            if num != val:
                nums[ptr] = num
                ptr += 1
        return ptr
class Solution:
    def removeElement(self, nums: List[int], val: int) -> int:
        fast = slow = 0
        while(fast < len(nums)):
            if(nums[fast] != val):
                nums[slow] = nums[fast]
                slow+=1
            fast+=1
        return slow

Golang

func removeElement(nums []int, val int) int {
	fast, slow := 0, 0
	for fast < len(nums) {
		if nums[fast] != val {
			nums[slow] = nums[fast]
			slow++
		}
		fast++
	}
	return slow
}