27. 移除元素

27. 移除元素 #

题目地址 #

解题思路 #

暴力法 #

TODO

双指针法 #

可以用双指针/快慢指针来解决。快指针用来寻找新数组的元素,新数组就是不含有目标元素的数组,慢指针用来指向更新新数组下标的位置。这里需要的注意的是,“新数组”其实就是旧数组,因为一直都在在同一个数组上的操作,这也是题目的要求👇

不要使用额外的数组空间,你必须仅使用O(1)额外空间并原地修改输入数组。

具体实现 #

```go package main import "fmt" func removeElement(nums []int, val int) int { length := len(nums) low := 0 for i := 0; i < length; i++ { if nums[i] != val { nums[low] = nums[i] low++ } } return low } func main() { x := []int{1, 2, 6, 7, 9, 6, 6, 6} xx := removeElement(x, 6) fmt.Println(x, xx) } ```
```go package main import "fmt" func removeElement(nums []int, val int) int { if len(nums) == 0 { return 0 } length := len(nums) for i := 0; i < length; i++ { if nums[i] == val { // 发现需要移除的元素,就将数组集体向前移动一位 for j := i + 1; j < length; j++ { nums[j-1] = nums[j] } // 因为下标i以后的数值都向前移动了一位,所以i也向前移动一位 // 因为不知道移动过来的第一位的值是不是 val i-- length-- // 此时数组的大小-1 } } return length } func main() { x := []int{1, 2, 6, 7, 9, 6, 6, 6} xx := removeElement(x, 6) fmt.Println(x, xx) } ```

参考 #