91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

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

凤山县| 滦平县| 梅州市| 沂水县| 昔阳县| 亳州市| 法库县| 紫阳县| 湘潭市| 安阳县| 桐乡市| 林周县| 汽车| 南岸区| 崇文区| 清远市| 屯留县| 马龙县| 镶黄旗| 林甸县| 蒲江县| 和平区| 虹口区| 莆田市| 内江市| 上蔡县| 咸丰县| 宜春市| 瑞昌市| 明溪县| 泰来县| 哈巴河县| 松溪县| 乐清市| 磐石市| 榆社县| 罗江县| 克山县| 曲麻莱县| 耒阳市| 温宿县|