【leetcode】283. 移動零( Move Zeroes )


題目描述

【leetcode】283. 移動零( Move Zeroes )

給定一個數組 nums,編寫一個函數將所有 0 移動到數組的末尾,同時保持非零元素的相對順序。

示例:

輸入: [0,1,0,3,12]
輸出: [1,3,12,0,0]
說明:

必須在原數組上操作,不能拷貝額外的數組。
儘量減少操作次數。
通過次數108,832提交次數182,986

第一次解答

思路
雙指針,一個指向最左邊的0元素,另一個往後遍歷,遇到非0元素就交換

test case:

代碼:

class Solution {
public:
    void moveZeroes(vector<int>& nums) {
        int index_zeros = 0;
        // 找到第一個非0元素
        int i=0;
        for(; index_zeros<nums.size(); ++index_zeros){
            if(0 == nums[index_zeros]){
                break;
            }
        }
        // 交換非0元素到數組前面
        for(int i=index_zeros+1; i<nums.size(); ++i){
            if(0 != nums[i]){
                nums[index_zeros] = nums[i];
                nums[i] = 0;
                ++index_zeros;
            }
        }
    }
};

結果:

在這裏插入圖片描述

相關/參考鏈接

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章