Leetcode 075. 顏色分類

地址 https://leetcode-cn.com/problems/sort-colors/

給定一個包含紅色、白色和藍色,一共 n 個元素的數組,原地對它們進行排序,
使得相同顏色的元素相鄰,並按照紅色、白色、藍色順序排列。
此題中,我們使用整數 0、 1 和 2 分別表示紅色、白色和藍色。

示例 1:
輸入:nums = [2,0,2,1,1,0]
輸出:[0,0,1,1,2,2]

示例 2:
輸入:nums = [2,0,1]
輸出:[0,1,2]

示例 3:
輸入:nums = [0]
輸出:[0]

示例 4:
輸入:nums = [1]
輸出:[1]

解答
首先樸素想法是排序 就能得到題目要求,但是複雜度是O(nlogn);

class Solution {
public:
    void sortColors(vector<int>& nums) {
        sort(nums.begin(),nums.end());
        return ;
    }
};

可以想到 整個數組有兩個邊界 x1 和 x2

x1左邊全部是0 x1右邊全部是1
x2左邊全是1 x2右邊全是2

掃描兩次即可,每次都是從頭到尾掃描,時間複雜度也是O(n)

class Solution {
public:
    void sortColors(vector<int>& nums) {
        int first = 0; int find =0;
        //首先保證0 全部歸位
        for(find  =0;find<nums.size();find++){
            if(nums[find]==0){
                swap(nums[first],nums[find]);
                first++;
            }
        }
        //0全部歸位後, 查找1
        for(find = first;find<nums.size();find++){
            if(nums[find]==1){
                swap(nums[first],nums[find]);
                first++;
            }
        } 
        return ;
    }
};

我的視頻題解空間

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