[leetcode]Sort Colors
来源:互联网 发布:最新淘宝达人申请 编辑:程序博客网 时间:2024/05/10 10:29
题目地址: https://oj.leetcode.com/problems/sort-colors/
题目大致含义:一个数组有3个数字:0,1,2.将这个数组排序。0在最前面,2在最后面。 如果可以,尽量只扫描一遍数组。
method:
第一种想法:
扫描一遍数组,记录0,1,2的个数。第二遍分别写入对应个数的0,1,2.
代码如下:
class Solution {public: void sortColors(int A[], int n) { int red=0, white=0, blue=0; for(int i=0; i<n; i++) { if(A[i] == 0) red++; if(A[i] == 1) white++; if(A[i] == 2) blue++; } int pos = 0; while(red-- >0) { A[pos++] = 0; } while(white-- >0) { A[pos++] = 1; } while(blue-- >0) { A[pos++] = 2; } }};
如果只扫描一次数组的话。则需要对应额外的指针。
代码如下:
class Solution {public: void sortColors(int A[], int n) { int i=-1, j=-1, k=-1; for(int p = 0; p < A.length; p++) { if(A[p] == 0) { A[++k]=2; A[++j]=1; A[++i]=0; } else if (A[p] == 1) { A[++k]=2; A[++j]=1; } else if (A[p] == 2) { A[++k]=2; } } }};
这个方法用i,j,k分别指向当前0,1,2的位置。但是这个方法存在的一个问题是:额外的写比较多。
下面的这个方法类似上面的方法,但是减少了额外的写。
代码:
class Solution {public: void sortColors(int A[], int n) { int j = 0, k = n; for(int i=0; i<k; i++) { if(A[i] == 0) swap(A[j++], A[i]); else if(A[i] == 2) swap(A[--k], A[i--]); } }};
0 0
- LeetCode: Sort Colors
- LeetCode Sort Colors
- LeetCode : Sort Colors
- leetcode 77: Sort Colors
- Leetcode 75 Sort Colors
- leetcode 101: Sort Colors
- [LeetCode]Sort Colors
- [leetcode]Sort Colors
- LeetCode-Sort Colors
- [leetcode] Sort Colors
- [LeetCode] Sort Colors
- [leetCode] Sort Colors
- LeetCode - Sort Colors
- leetcode:Sort Colors
- LeetCode | Sort Colors
- 【LeetCode】Sort Colors
- Leetcode: Sort Colors
- [LeetCode] Sort Colors
- ios自定义类(UIView)代码生成简单的UITableViewCell
- 2014-09-30《尘埃落定》
- Python快速教程
- window下的线程池
- Debian7离线升级bash漏洞—再修复方法
- [leetcode]Sort Colors
- 嵌入式 linux中kernel代码/lib/klist.c文件分析
- Linux系统平台下关于GCC编译及使用的方法(-Werror,它要求GCC将所有的警告当成错误进行处理 )
- JAVA学习——Servlet
- CC2530与zigbee学习笔记の协调器、路由器、终端的概念
- Java知识总结
- 正则表达式(转)
- 动态规划解决矩阵左上角到右下角和最大
- mysql事物小笔记