陣列——8、移動零
阿新 • • 發佈:2018-12-01
給定一個數組nums, 編寫一個函式將所有0移動到陣列的末尾,同時保持非零元素的相對順序。
示例:
輸入:[0, 1, 0, 3, 12]
輸出:[1, 3, 12, 0, 0]
說明:
- 必須在原陣列上操作,不能拷貝額外的陣列。
- 儘量減少操作次數。
方法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