LeetCode,Go 把數組裏的零全部移動到結尾

力扣題目:

給定一個數組 nums,編寫一個函數將所有 0 移動到數組的末尾,同時保持非零元素的相對順序。

示例:

輸入: [0,1,0,3,12] 輸出: [1,3,12,0,0] 說明:

必須在原數組上操作,不能拷貝額外的數組。儘量減少操作次數。

解題 : 雙指針

使用雙指針,左指針指向當前已經處理好的序列的尾部,右指針指向待處理序列的頭部。

右指針不斷向右移動,每次右指針指向非零數,則將左右指針對應的數交換,同時左指針右移。

注意到以下性質:

左指針左邊均爲非零數;

右指針左邊直到左指針處均爲零。

因此每次交換,都是將左指針的零與右指針的非零數交換,且非零數的相對順序並未改變。

func moveZeroes(nums []int) {
    left, right, n := 0, 0, len(nums)
    for right < n {
        if nums[right] != 0 {
            nums[left], nums[right] = nums[right], nums[left]
            left++
        }
        right++
    }
}
本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/WYHplvZjoZQ1893nvGoCjA