難度:簡單
題目描述:
給定乙個陣列nums
,編寫乙個函式將所有0
移動到陣列的末尾,同時保持非零元素的相對順序。
示例:
說明:輸入:[0,1,0,3,12]輸出:[1,3,12,0,0]
必須在原陣列上操作,不能拷貝額外的陣列。
儘量減少操作次數。
解題語言:c#
方法:雙指標(力扣官方)
思路及解法
使用雙指標,左指標指向當前已經處理好的序列的尾部,右指標指向待處理序列的頭部。
右指標不斷向右移動,每次右指標指向非零數,則將左右指標對應的數交換,同時左指標右移。
注意到以下性質:
左指標左邊均為非零數;
右指標左邊直到左指標處均為零。
因此每次交換,都是將左指標的零與右指標的非零數交換,且非零數的相對順序並未改變。
**
public class solution
right++;}}
public void swap(int nums, int left, int right)
}
複雜度分析
優化方案:
都知道是0,還換啥?覆蓋,後面補0就行了
class solution//第一次遍歷的時候,j指標記錄非0的個數,只要是非0的統統都賦給nums[j]
int j = 0;
for(int i=0;i} //非0元素統計完了,剩下的都是0了
//所以第二次遍歷把末尾的元素都賦為0即可
for(int i=j;i}}
刷題筆記 力扣283 移動零
獲得的思考 獲得的思考 給定乙個陣列nums,編寫乙個函式將所有0移動到陣列的末尾,同時保持非零元素的相對順序。示例 輸入 0 1,0 3,12 輸出 1 3,12 0,0 說明 必須在原陣列上操作,不能拷貝額外的陣列。儘量減少操作次數。思路 先統計容器中0的個數,刪掉所有的零,並在結尾補零 cla...
力扣日記 283 移動零
給定乙個陣列 nums,編寫乙個函式將所有 0 移動到陣列的末尾,同時保持非零元素的相對順序。示例 輸入 0,1,0,3,12 輸出 1,3,12,0,0 說明 必須在原陣列上操作,不能拷貝額外的陣列。儘量減少操作次數。方法一 class solution def movezeroes self,n...
力扣283 移動零 C
移動零 給定乙個陣列 nums,編寫乙個函式將所有 0 移動到陣列的末尾,同時保持非零元素的相對順序。示例 輸入 0,1,0,3,12 輸出 1,3,12,0,0 說明 必須在原陣列上操作,不能拷貝額外的陣列。儘量減少操作次數。分析 這個題有兩個要求 1 把零元素移動到陣列末尾 2 保持非零元素的相...