給定乙個陣列 nums,編寫乙個函式將所有 0 移動到陣列的末尾,同時保持非零元素的相對順序。
示例:輸入: [0,1,0,3,12]
輸出: [1,3,12,0,0]
說明:必須在原陣列上操作,不能拷貝額外的陣列。
儘量減少操作次數。
思路雙指標法。這道題目相當經典,將所有 0 移動到陣列的末尾,分為兩步,第一是將非0數填充到開頭,第二是將末尾補0。
用乙個慢指標slow來表示當前需要填充的位置,在用乙個快指標i找到非0陣列,找到填充到慢指標指示的位置,慢指標+1,表示填充下乙個位置,在這個一直有slow<=i
,所以訪問到i時,這個位置的值要麼已經處理過,要麼和慢指標指向的是同乙個位置,覆蓋操作也不會導致任何資料的丟失。
class
solution
}for
(int i=slow;i)nums[i]=0
;}}
LeetCode283 移動零(簡單)
原題目給定乙個陣列 nums,編寫乙個函式將所有 0 移動到陣列的末尾,同時保持非零元素的相對順序。示例 輸入 0,1,0,3,12 輸出 1,3,12,0,0 說明 必須在原陣列上操作,不能拷貝額外的陣列。儘量減少操作次數。題目大意 將陣列所有的零移至末尾,且不改變其他數字的順序,且只能開闢常數級...
leetcode 283 移動零,雙指標解法
題目描述 給定乙個陣列 nums,編寫乙個函式將所有 0 移動到陣列的末尾,同時保持非零元素的相對順序。示例 輸入 0,1,0,3,12 輸出 1,3,12,0,0 說明 必須在原陣列上操作,不能拷貝額外的陣列。儘量減少操作次數。public void movezeroes int nums 思路 ...
leetcode 283 移動零 單指標方法
題解是雙指標,但其實單指標就足夠了。每次遍歷把零元素存起來,這樣交換後交換的零元素也在後面,一次遍歷就可以結束。from collections import deque class solution def movezeroes self,nums list int none do not ret...