該題Move Zeros的題目如下所示,輸入為一個陣列,要將該陣列中所有為0的元素移動至最後面進行存放,如範例1所示,輸入為010312,則移動後之輸出為131200

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的部分)。

arrow
arrow

    水面上的小草 發表在 痞客邦 留言(0) 人氣()