1. 程式人生 > >陣列——8、移動零

陣列——8、移動零

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

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

說明:

  1. 必須在原陣列上操作,不能拷貝額外的陣列。
  2. 儘量減少操作次數。

方法1:

思路:遍歷列表,查詢不為0的元素,按索引重新存進陣列中,當找到k個不為0的元素後,將後面全部補充為0。

class Solution:
    def moveZeroes(self, nums):
    	k = 0
    	for i in range(len(nums)):
    	    if
nums[i] != 0: nums[k] = nums[i] k += 1 for i in range(k, len(nums)): nums[i] = 0

方法2:(大佬的智慧)

思路:採用兩個索引:fast和slow,均付初值0。fast在找到非零元素後將其依次存進slow中,同時將該位置元素改為0,故當fast遍歷完陣列後,不為0 的全部存於slow中,而後面的元素全被修改為0。

class Solution:
    def moveZeroes(self, nums):
    	length =
len(nums) if length <= 1: return slow = fast = 0 while fast < length: if nums[fast] != 0: if slow != fast and nums[slow] == 0: nums[slow] = nums[fast] nums[fast] = 0 slow += 1 fast += 1