一. 題目描述
Given an array nums, write a function to move all 0's
to the end of it while maintaining the relative order of the non-zero elements.
For example, given nums = [0, 1, 0, 3, 12]
, after calling your function, nums should be [1, 3, 12, 0, 0]
.
Note:
You must do this in-place without making a copy of the array. Minimize the total number of operations.二. 題目分析
題目的意思很明確,給定一個數組,將非零元素調整到前面,零元素放在數組後面,要求原位操作並使用盡量少的操作次數。
題目比較簡單,只需掃描一次數組,在此過程中使用一個整形變量Index
用於記錄非零元素的個數,每遇到一個非零數,將其放在nums[Index]
中,然後Index
加1
。
遍歷一遍後,nums
的非零元素位置已經確定,只需將數組後半段全部置零即可,由於Index
記錄了非零元素的個數,所以置零操作也很方便。
三. 示例代碼
class Solution {
public:
void moveZeroes(vector& nums) {
if (nums.size() < 1) return;
int Index = 0;
for (int i = 0; i < nums.size(); ++i)
if (nums[i] != 0)
nums[Index++] = nums[i];
for (;Index < nums.size(); ++Index)
nums[Index] = 0;
}
};
四. 小結
對於這類問題,一般都要求原位操作及盡量少的操作次數。