(6)Go單索引解決移動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,通過。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容