給定數組 nums,將所有 0 移動到末尾,同時保持非零元素相對順序。要求原地操作,最小化操作次數。
使用 idx 記錄下一個非零元素應放置的位置。遍歷數組,遇到非零元素交換到 idx 並遞增 idx。遍歷結束後,idx 之後自動為 0(因為原數組中非零元素已前移,剩餘位置可直接置 0 或本身已為 0)。
class Solution {
public:
void moveZeroes(vector& nums) {
int idx = 0;
for (int i = 0; i < nums.size(); ++i) {
if (nums[i] != 0) {
swap(nums[idx++], nums[i]);
}
}
}
};