LeetCode 27. 移除元素 【简单】

55 阅读1分钟

题干

给你一个数组 nums **和一个值 val,你需要原地移除所有数值等于 val **的元素。元素的顺序可能发生改变。然后返回 nums 中与 val 不同的元素的数量。

假设 nums 中不等于 val 的元素数量为 k,要通过此题,您需要执行以下操作:

  • 更改 nums 数组,使 nums 的前 k 个元素包含不等于 val 的元素。nums 的其余元素和 nums 的大小并不重要。
  • 返回 k

题解--快慢指针

题目只关心前k个值,只要前k个值里面没有等于k的就满足要求,那么很自然想到双指针中的快慢指针,快指针负责寻找不等于val的值,一旦找到就把值吐给慢指针所指向的位置,慢指针永远指向下一个接收不等于val的值的位置,直到快指针走完整个列表,意味着快指针已经找到了所有不等于val的值,返回慢指针指向的位置,即为列表中不等于val的个数。

  • 时间复杂度O(n)
  • 空间复杂度O(1)
import "fmt"

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

func main() {
	nums := []int{3, 2, 2, 3}
	val := 3
	removeElement(nums, val)
	fmt.Println(nums)

	nums = []int{0, 1, 2, 2, 3, 0, 4, 2}
	val = 2
	removeElement(nums, val)
	fmt.Println(nums)
}