leetcode 75. Sort Colors
来源:互联网 发布:windows xp 反复重启 编辑:程序博客网 时间:2024/06/04 18:16
首先是一个计数的思路:代码如下不难理解。
void sortColors(vector<int>& nums) { if (nums.empty()) return; //初始化一个count数组,count[0] , count[1] , count[2] 分别记录nums中0 , 1 , 2出现个数 vector<int> count(3, 0); vector<int>::iterator iter = nums.begin(); for (; iter != nums.end(); iter++) { if (*iter == 0) count[0]++; else if (*iter == 1) count[1]++; else if (*iter == 2) count[2]++; }//for //对原数组排序 int i = 0; while (i < count[0]) nums[i++] = 0; while (i < (count[0] + count[1])) nums[i++] = 1; while (i < (count[0] + count[1] + count[2])) nums[i++] = 2; return;}
从网上看了两指针的方法,思路很清晰,拷贝学习下:
void sortColors(vector<int>& nums) { int i = 0, j = i, k = nums.size() - 1; while(j <= k){ if(nums[j] == 0) swap(nums[i++], nums[j++]);//0交换到前面 else if(nums[j] == 1) j++;//1保持不动 else swap(nums[k--], nums[j]);//2交换到尾部 }}
代码比上述多点,但是思路一致帮助理解:
void sortColors(vector<int>& nums) { int start = 0; int end = nums.size()-1; for(int i = 0 ; i<nums.size();i++)//把0交换到前面 { if(nums[i]==0) { if(i!=start) swap(nums[i],nums[start]); start++; } } for(int i = nums.size()-1 ; i>=start ;i--)//把2交换到尾部 { if(nums[i]==2){ if(i!=end) swap(nums[i],nums[end]); end--; } }}
0 0
- [LeetCode]75.Sort Colors
- LeetCode --- 75. Sort Colors
- [Leetcode] 75. Sort Colors
- [leetcode] 75.Sort Colors
- 【leetcode】75. Sort Colors
- [leetcode] 75. Sort Colors
- Leetcode 75. Sort Colors
- *LeetCode 75. Sort Colors
- 75. Sort Colors LeetCode
- Leetcode 75. Sort Colors
- [LeetCode]75. Sort Colors
- LeetCode 75. Sort Colors
- LeetCode *** 75. Sort Colors
- leetcode 75. Sort Colors
- LeetCode 75. Sort Colors
- leetcode-75. Sort Colors
- [leetcode]75. Sort Colors
- LeetCode-75.Sort Colors
- C语言学习历程——字符串训练01
- 《黑洞简史》简记
- 数字图像处理实验(5):Proj03-01 ~ Proj03-06
- 远程访问Tensorboard
- YIIstudybasic
- leetcode 75. Sort Colors
- Educational Codeforces Round 20 B
- 重读Paul Graham
- 中超赛程分析(5)--德比战
- 树莓派第一次使用(笔记本+网线)
- 常用的正则表达式
- web开发,读取txt文件(程序或本地硬盘)
- linux驱动调试--段错误之oops信息分析
- SRM579 Div1Medium TravellingPurchasingMan