Go算法

(6)Go单索引解决移动0问题

2019-05-14  本文已影响0人  哥斯拉啊啊啊哦
算法:用单索引解决,定一个索引nonZero,在[0...nonZero]的元素均不为0,
[nonZero+1...length-1]的元素均为0

// 时间复杂度O(n)
// 空间复杂度O(1)
func moveZeroes(nums []int) {
    length := len(nums)
    nonZero := 0 // [0...nonZero)的元素均为非0元素
    for i := 0; i < length; i++ {
        if nums[i] != 0 {
            nums[nonZero] = nums[i]
            nonZero++
        }
    }

    for i := nonZero; i < length; i++ {
        nums[i] = 0
    }
}

// 方法2,代码更简洁,不过交换次数较多,时间效率不如第一种
func moveZeroes2(nums []int) {
    length := len(nums)
    nonZero := 0 // [0...nonZero)的元素均为非0元素
    for i := 0; i < length; i++ {
        if nums[i] != 0 {
            nums[nonZero], nums[i] = nums[i], nums[nonZero]
            nonZero++
        }
    }
}

提交leetcode,通过。

上一篇下一篇

猜你喜欢

热点阅读