2021-10-31:移动零。给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。示例:输入: [0,1,0,3,12]。输出: [1,3,12,0,0]。说明:必须在原数组上操作,不能拷贝额外的数组。尽量减少操作次数。力扣283。

答案2021-10-31:

一次遍历即可。双指针都从左往右遍历,其中一个指针遇0不右走遇1右走,另一个变量一直往右走。遇到0,两个指针的值交换。 时间复杂度:O(N)。 额外空间复杂度:O(1)。

代码用golang编写。代码如下:

package main

import "fmt"

func main() {
    nums := []int{1, 3, 0, 2, 0, 4}
    moveZeroes(nums)
    fmt.Println(nums)
}

func moveZeroes(nums []int) {
    to := 0
    for i := 0; i < len(nums); i++ {
        if nums[i] != 0 {
            nums[to], nums[i] = nums[i], nums[to]
            to++
        }
    }
}

执行结果如下: 图片


左神java代码