0283. Move Zeros - chasel2361/leetcode GitHub Wiki
Given an array nums, write a function to move all 0's to the end of it while maintaining the relative order of the non-zero elements.
Example:
Input: [0,1,0,3,12]
Output: [1,3,12,0,0]
Note:
1. You must do this in-place without making a copy of the array.
2. Minimize the total number of operations.
這個題目的目的是處理陣列中的 0,直接編輯輸入的陣列,將其挪到陣列尾端。
我解題的思維很單純,把陣列中的每一個項取出來看,如果是 0 就將其刪除、並在尾端加入 0,程式碼如下
[1] 可以用 for 迴圈來控制迭代的次數
class Solution:
def moveZeroes(self, nums: List[int]) -> None:
"""
Do not return anything, modify nums in-place instead.
"""
i = 0
for _ in range(len(nums)): # [1]
if nums[i] == 0:
del nums[i]
nums.append(0)
else:
i += 1
我原本迴圈的部分打算用 while i < len(nums)
,但如果這樣做的話,當迴圈進行到陣列尾端全為零的部分就會停不下來,所以才使用 for 來控制迴圈次數。
這樣寫的時間複雜度是 O(N),空間複雜度是 O(1)
另外,也可以使用類似 two pointer 的作法,以 i 代表現在的位置,n 代表非零尾端的位置,但核心概念以及時間/空間複雜度跟前面的做法差不多
class Solution:
def moveZeroes(self, nums: List[int]) -> None:
"""
Do not return anything, modify nums in-place instead.
"""
i = 0
n = len(nums)
while i < n:
if nums[i] == 0:
del nums[i]
nums.append(0)
n -= 1
else:
i += 1