該題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的部分)。
文章標籤
全站熱搜
