国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

LeetCode 75. Sort Colors

2019-11-11 04:16:54
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

描述 Given an array with n objects colored red, white or blue, sort them so that objects of the same color are adjacent, with the colors in the order red, white and blue.

Here, we will use the integers 0, 1, and 2 to rePResent the color red, white, and blue respectively.

Note: You are not suppose to use the library’s sort function for this problem.

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 an one-pass algorithm using only constant space?

分析 由于 0, 1, 2 非常緊湊,首先想到計(jì)數(shù)排序 (counting sort),但需要掃描兩遍,不符合題目要求。 由于只有三種顏色,可以設(shè)置兩個(gè) index,一個(gè)是 red 的 index,一個(gè)是 blue 的 index,兩邊往中 間走。時(shí)間復(fù)雜度 O(n),空間復(fù)雜度 O(1)。 第 3 種思路,利用快速排序里 partition 的思想,第一次將數(shù)組按 0 分割,第二次按 1 分割,排 序完畢,可以推廣到 n 種顏色,每種顏色有重復(fù)元素的情況。

代碼

class Solution {public: void sortColors(vector<int>& nums) { const int n = nums.size(); int red = 0; int blue = n - 1; for (size_t i = 0; i < blue + 1;) { if (nums[i] == 0) swap(nums[i++], nums[red++]); else if (nums[i] == 2) swap(nums[i], nums[blue--]); else i++; } }};
發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 湘阴县| 扎鲁特旗| 涟水县| 平阳县| 平谷区| 榆社县| 伊吾县| 祥云县| 大连市| 贵德县| 广汉市| 沙田区| 玉田县| 长子县| 彰武县| 安新县| 运城市| 开江县| 广汉市| 望都县| 达州市| 新疆| 镇坪县| 惠东县| 灵宝市| 定兴县| 全州县| 民勤县| 平遥县| 长治市| 固原市| 唐海县| 镇康县| 岚皋县| 安阳市| 资阳市| 克拉玛依市| 和硕县| 项城市| 南召县| 当阳市|