LeetCode283:移動零
阿新 • • 發佈:2018-12-12
給定一個數組 nums
,編寫一個函式將所有 0
移動到陣列的末尾,同時保持非零元素的相對順序。
示例:
輸入:[0,1,0,3,12]
輸出:[1,3,12,0,0]
說明: 1、必須在原陣列上操作,不能拷貝額外的陣列。 2、儘量減少操作次數。
解析:
如果沒有時間的限制,可以用額外陣列來完成,但是題目中有限制,就不能採用這種方法了。需要用到雙指標的方法,一個指標start指到當前第一個0的位置,end指到當前遍歷位置,用遍歷到的非0元素去覆蓋0元素,然後在陣列的尾部新增0元素即可。
程式碼:
void moveZeroes(vector<int>& nums) { if (nums.empty()) return; int start = 0;//定義兩個指標 int end = 0; while (end < nums.size())//遍歷陣列,用非零元覆蓋零元 { if (nums[end] != 0) { nums[start] = nums[end]; start++; end++; } else { end++; } } while (start < nums.size())//最後一個非零元后面全部設定為0 { nums[start] = 0; start++; } }