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.
[Thoughts]
典型的雙指針問題。使用兩個指針遍歷數組,一個指向數值爲0的元素,另外一個指向數值不爲0的元素,在遍歷的過程當中,不斷交換兩個指針的值。
例如,
比較簡單的一道題。
[Code]
1: class Solution {
2: public:
3: void moveZeroes(vector<int>& nums) {
4: for(int zero_index = 0, none_zero_index = 0;
5: none_zero_index < nums.size() && zero_index < nums.size();
6: ) {
7: if(nums[zero_index] != 0) {
8: zero_index++;
9: none_zero_index = zero_index;
10: continue;
11: }
12: if(nums[none_zero_index] == 0) {
13: none_zero_index++;
14: continue;
15: }
16: int temp = nums[zero_index];
17: nums[zero_index] = nums[none_zero_index];
18: nums[none_zero_index] = temp;
19: zero_index++;
20: none_zero_index++;
21: }
22: }
23: };
git: https://github.com/codingtmd/leetcode/blob/master/src/Move_Zeroes.cpp