該題Move Zeros的題目如下所示,輸入為一個陣列,要將該陣列中所有為0的元素移動至最後面進行存放,如範例1所示,輸入為0、1、0、3、12,則移動後之輸出為1、3、12、0、0。
Example:
Input: [0,1,0,3,12]
Output: [1,3,12,0,0]
作法解析:使用Two pointer進行實現,將兩個雙指標索引放在起始的位置,並利用其中一個指標進行偵測,若遇到0則向右移一格,若不是則將兩個指標索引之值進行互換。
程式碼:
class Solution { public: void moveZeroes(vector<int>& nums) { int i = 0, j = 0; int tmp; while (j < nums.size()) { if (nums[j] == 0) j++; else { tmp = nums[j]; nums[j] = nums[i]; nums[i] = tmp; i++; j++; } } } };
1.將兩個指標索引放置於頭的位置(int i = 0, j = 0;)。
2.利用其中一個指標索引進行偵測,若遇到0則向右移一格(if (nums[j] == 0))。
3.若偵測到不為0,則將兩指標索引之值進行互換,並且將兩個指標索引向右移一格(程式中else的部分)。
文章標籤
全站熱搜
留言列表