題目
給定一個數組 nums,編寫一個函數將所有 0 移動到數組的末尾,同時保持非零元素的相對順序。
請注意 ,必須在不復制數組的情況下原地對數組進行操作。
示例 1:
輸入: nums = [0,1,0,3,12]
輸出: [1,3,12,0,0]
示例 2:
輸入: nums = [0]
輸出: [0]
答案
這道題可以使用雙指針的方法解決,一個指針用來遍歷數組,一個指針用來記錄0的末尾位置。
具體步驟如下:
定義兩個指針,一個指向當前遍歷的位置,一個指向0的末尾位置。
遍歷數組,如果當前元素為0,則將其移動到0的末尾位置,并將0的末尾位置指針向前移動一位。
如果當前元素不為0,則將其移動到當前位置,并將當前位置指針向前移動一位。
重復上述步驟,直到遍歷完整個數組。
代碼如下:
def moveZeroes(nums): if not nums: return [] left = 0 # 當前遍歷位置指針 right = 0 # 0的末尾位置指針 n = len(nums) while left < n: if nums[left] == 0: nums[left], nums[right] = nums[right], nums[left] right += 1 else: nums[left] = nums[left] + 1 # 非零元素加上一個非零值,保證相對順序不變 left += 1 return nums
時間復雜度為O(n),空間復雜度為O(1)。