題目描述
【leetcode】283. 移動零( Move Zeroes )
給定一個數組 nums,編寫一個函數將所有 0 移動到數組的末尾,同時保持非零元素的相對順序。
示例:
輸入: [0,1,0,3,12]
輸出: [1,3,12,0,0]
說明:
必須在原數組上操作,不能拷貝額外的數組。
儘量減少操作次數。
通過次數108,832提交次數182,986
第一次解答
思路
雙指針,一個指向最左邊的0元素,另一個往後遍歷,遇到非0元素就交換
test case:
代碼:
class Solution {
public:
void moveZeroes(vector<int>& nums) {
int index_zeros = 0;
// 找到第一個非0元素
int i=0;
for(; index_zeros<nums.size(); ++index_zeros){
if(0 == nums[index_zeros]){
break;
}
}
// 交換非0元素到數組前面
for(int i=index_zeros+1; i<nums.size(); ++i){
if(0 != nums[i]){
nums[index_zeros] = nums[i];
nums[i] = 0;
++index_zeros;
}
}
}
};
結果: