中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C++怎么實現顏色排序

發布時間:2022-03-28 13:51:34 來源:億速云 閱讀:170 作者:iii 欄目:大數據

這篇文章主要介紹了C++怎么實現顏色排序的相關知識,內容詳細易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇C++怎么實現顏色排序文章都會有所收獲,下面我們一起來看看吧。

顏色排序

Example:

Input: [2,0,2,1,1,0]
Output: [0,0,1,1,2,2]

Follow up:

  • A rather straight forward solution is a two-pass algorithm using counting sort.
    First, iterate the array counting number of 0"s, 1"s, and 2"s, then overwrite array with total number of 0"s, then 1"s and followed by 2"s.

  • Could you come up with a one-pass algorithm using only constant space?

這道題的本質還是一道排序的題,題目中給出提示說可以用計數排序,需要遍歷數組兩遍,那么先來看這種方法,因為數組中只有三個不同的元素,所以實現起來很容易。

- 首先遍歷一遍原數組,分別記錄 0,1,2 的個數。
- 然后更新原數組,按個數分別賦上 0,1,2。

解法一:

class Solution {
public:
    void sortColors(vector<int>& nums) {
        vector<int> colors(3);
        for (int num : nums) ++colors[num];
        for (int i = 0, cur = 0; i < 3; ++i) {
            for (int j = 0; j < colors[i]; ++j) {
                nums[cur++] = i;
            }
        }
    }
};

題目中還要讓只遍歷一次數組來求解,那么就需要用雙指針來做,分別從原數組的首尾往中心移動。

- 定義 red 指針指向開頭位置,blue 指針指向末尾位置。

- 從頭開始遍歷原數組,如果遇到0,則交換該值和 red 指針指向的值,并將 red 指針后移一位。若遇到2,則交換該值和 blue 指針指向的值,并將 blue 指針前移一位。若遇到1,則繼續遍歷。

解法二:

class Solution {
public:
    void sortColors(vector<int>& nums) {
        int red = 0, blue = (int)nums.size() - 1;
        for (int i = 0; i <= blue; ++i) {
            if (nums[i] == 0) {
                swap(nums[i], nums[red++]);
            } else if (nums[i] == 2) {
                swap(nums[i--], nums[blue--]);
            } 
        }
    }
};

當然我們也可以使用 while 循環的方式來寫,那么就需要一個變量 cur 來記錄當前遍歷到的位置,參見代碼如下:

解法三:

class Solution {
public:
    void sortColors(vector<int>& nums) {
        int left = 0, right = (int)nums.size() - 1, cur = 0;
        while (cur <= right) {
            if (nums[cur] == 0) {
                swap(nums[cur++], nums[left++]);
            } else if (nums[cur] == 2) {
                swap(nums[cur], nums[right--]);
            } else {
                ++cur;
            }
        }
    }
};

關于“C++怎么實現顏色排序”這篇文章的內容就介紹到這里,感謝各位的閱讀!相信大家對“C++怎么實現顏色排序”知識都有一定的了解,大家如果還想學習更多知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

c++
AI

海淀区| 招远市| 浮梁县| 怀来县| 得荣县| 沭阳县| 临城县| 兴隆县| 天柱县| 漳平市| 突泉县| 西充县| 满洲里市| 科技| 云南省| 衢州市| 贵州省| 盐山县| 平安县| 樟树市| 北京市| 承德市| 绥棱县| 丹棱县| 宣汉县| 宜兰县| 常州市| 廉江市| 雷波县| 丹巴县| 洛隆县| 晴隆县| 岑巩县| 田阳县| 南召县| 颍上县| 鹰潭市| 保定市| 富宁县| 呈贡县| 崇仁县|