第四天 283. Move Zeroes ,給定一個數列,把所有 0 移到最後面去,其他數字前後關係保持不變。

Input: [0,1,0,3,12]
Output: [1,3,12,0,0]

先寫一個會需要額外 create array 的方式

static int __ = [](){ std::ios::sync_with_stdio(false); return 0;}();
class Solution {
public:
    void moveZeroes(vector<int>& nums) {
        vector<int> tmp(nums.size());
        int ptr = 0;
        for(int i=0; i<nums.size(); i++) {
            if(nums[i] != 0) {
                tmp[ptr] = nums[i];
                ptr++;
            }
        }
        nums = tmp;
    }
};

稍微改寫一下,其實可以直接修改 input array,省去額外 memory

static int __ = [](){ std::ios::sync_with_stdio(false); return 0;}();
class Solution {
public:
    void moveZeroes(vector<int>& nums) {
        int ptr = 0;
        for(int i=0; i<nums.size(); i++) {
            if(nums[i] != 0) {
                nums[ptr++] = nums[i];
            }
        }
        if(ptr) {
            for(int i=ptr; i<nums.size(); i++)
                nums[i] = 0;
        }
    }
};

今天比較簡單~十分鐘打完收工。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步瞭解 Akismet 如何處理網站訪客的留言資料