Sort Colors
来源:互联网 发布:caffe 运算结果可视化 编辑:程序博客网 时间:2024/06/08 11:27
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 over write 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?
思路:注意题目的要求是一次遍历。代码如下:
void swap(int *a, int *b){int tmp;tmp = *b;*b = *a;*a = tmp;}void sortColors(int* nums, int numsSize) {int start1 = 0, end1 = numsSize-1;int i;while(start1 <= end1 && nums[start1] == 0)start1++;while(end1 >= start1 && nums[end1] == 2)end1 --;for(i = start1; i <= end1; ){if(nums[i] == 0){swap(nums+i, nums+start1);while(start1 <= end1 && nums[start1] == 0)start1++;i = start1;}else if(nums[i] == 2){swap(nums+i, nums+end1);while(end1 >= start1 && nums[end1] == 2)end1 --;}else{i++;}}}void sortColors2(int* nums, int numsSize) {int start1 = 0, end1 = numsSize-1;int i;for(i = start1; i <= end1; i++){if(nums[i] == 0){swap(nums+i, nums+start1);start1++;}if(nums[i] == 2){swap(nums+i, nums+end1);end1--;i--;}}}
参考:
https://github.com/haoel/leetcode/blob/master/algorithms/sortColors/sortColors.cpp
- Sort Colors
- sort colors
- Sort Colors
- Sort Colors
- Sort Colors
- Sort Colors
- Sort Colors
- Sort Colors
- Sort Colors
- Sort Colors
- Sort Colors
- Sort Colors
- Sort Colors
- Sort Colors
- Sort Colors
- Sort Colors
- Sort Colors
- Sort Colors
- 饼状图
- IM菜鸟学习之Socket聊天-简单服务器的搭建
- 3D MAX制作游戏高端人物模型
- Longest Consecutive Sequence
- 抽象类和接口的区别
- Sort Colors
- 统计字符串中每个字符出现的次数 打印结果是:a(2)b(1)
- TCP标志位简析
- 阶段反思
- C++中虚函数的实现原理
- python中编码
- 二进制中1的位置
- C++程序中尽可能使用const
- centos perf kvm使用