75. Sort Colors
2016-05-26 09:43
369 查看
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.
click to show follow up.
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的个数
class Solution {
public:
void sortColors(vector<int>& nums) {
int count_r = 0, count_w = 0, count_b = 0;
vector<int>result;
for(int i = 0; i < nums.size(); i++)
{
if(nums[i]==0)
count_r++;
if(nums[i]==1)
count_w ++;
if(nums[i]==2)
count_b++;
}
for(int j = 0; j< count_r; j++)
{
result.push_back(0);
}
for(int k =0; k < count_w; k++)
{
result.push_back(1);
}
for(int w =0; w < count_b; w++)
{
result.push_back(2);
}
nums = result;
}
};
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.
click to show follow up.
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的个数
class Solution {
public:
void sortColors(vector<int>& nums) {
int count_r = 0, count_w = 0, count_b = 0;
vector<int>result;
for(int i = 0; i < nums.size(); i++)
{
if(nums[i]==0)
count_r++;
if(nums[i]==1)
count_w ++;
if(nums[i]==2)
count_b++;
}
for(int j = 0; j< count_r; j++)
{
result.push_back(0);
}
for(int k =0; k < count_w; k++)
{
result.push_back(1);
}
for(int w =0; w < count_b; w++)
{
result.push_back(2);
}
nums = result;
}
};
相关文章推荐
- Training Set, Validation Set 和Testing Set之间的差别及关系
- 数据结构与算法的分析 —— 平均时间复杂度 vs 分摊时间复杂度
- MUI之父页面刷新
- JavaScript 的 addEventListener 与 removeEventListener
- System.loadLibrary 到底干了些啥
- Android framework系统默认设置修改
- YII扩展功能图
- php配置文件详解
- android之listView与gridView属性设置
- 【论文笔记】Recursive Recurrent Nets with Attention Modeling for OCR in the Wild
- SSH框架网上商城项目第1战之整合Struts2、Hibernate4.3和Spring4.2
- java反射机制
- 遍历一段时间内的所有日期
- 时间格式转换
- logback.配置
- 百度编辑器uediter使用简介
- 安卓studio关联依赖库问题
- suse linux 10 安装JDK 配置环境变量
- jquery-Kendo框架
- PHP 扒一扒这些题目都考了哪些知识点