码迷,mamicode.com
首页 > 其他好文 > 详细

leetcode:Sort Colors

时间:2014-11-23 07:05:53      阅读:185      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   io   ar   color   os   sp   for   

一、     题目

      给一个数组包含n个物体,有蓝色、红色和白色三种颜色,把他们分类并按照红、白、蓝的顺序排列,我们用0、1、2来表示红白蓝的颜色

注解:很容易想到遍历两遍数组得到三个数的数目,再覆盖,但是请只遍历一遍数组来解决。

二、     分析

      很简单,题目的意思其实就是让对一个数组排序,数组中的元素只有0、1、2,并且要求只能遍历一遍数组,常数空间复杂度。此时我们可以想到借助于快速排序 的partition思想,以1为中间枢纽对数组进行划分,使0在数组的左边,2在数组的右边,1在数组的中间。   


 

    1. class Solution {  
    2. public:  
    3.     void sortColors(int A[], int n) {  
    4.         int end = -1;  
    5.         int start = n;  
    6.         int i=0;  
    7.         //end是放0那部分的尾部索引,start是放2那部分的首部索引  
    8.         //碰到0放到end+1处,碰到2放到start-1处,碰到1指针直接后移  
    9.         while(i<start){  
    10.           if(A[i] == 0 && i!=++end)  
    11.              swap(A[end],A[i]);  
    12.           else if(A[i] == 2 && i!= --start)   
    13.              swap(A[start],A[i]);  
    14.           else  
    15.              i++;  
    16.         }  
    17.     }  
    18. }; 

leetcode:Sort Colors

标签:style   blog   http   io   ar   color   os   sp   for   

原文地址:http://www.cnblogs.com/yuyanbian/p/4116115.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!