27 移除元素-简单

题目:

给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。

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

元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。

分析:

前后指针,前面的指针负责记录符合条件的元素,后面的指针遍历整个数组

// date 2022-09-15
func removeElement(nums []int, val int) int {
    idx := 0
    for i := 0; i < len(nums); i++ {
        if nums[i] != val {
            nums[idx] = nums[i]
            idx++
        }
    }
    return idx
}

算法2:交换的思想,将每个等于val的元素,交换至数组的尾部,维护尾部索引,返回新的尾部索引。时间复杂度O(n) 空间复杂度O(n)

// date 2021-03-13
func removeElements(nums []int, val int) int {
  i, tail := 0, len(nums)
  for i < tail; {
    if nums[i] == val {
      tail--
      nums[i] = nums[tail]
      nums[tail] = val
    } else {
      i++
    }
  }
  return tail
}

最后更新于