[刷题] LeetCode 75 Sort Colors

要求

给只有0、1、2三个元素的数组排序

思路

方法1:遍历数组,利用辅助数组保存三个元素的个数,再写入(遍历两遍)

方法2:模拟三路快排,遍历一遍完成排序

实现

方法1

 1 void sortColors(vector<int>& nums){
 2     int count[3] = {0};
 3     for( int i = 0 ; i < nums.size() ; i ++ ){
 4         assert( num[i] >= 0 && nums[i] <= 2 );
 5         count[nums[i]] ++;
 6     }
 7             
 8     int index = 0;
 9     for( int i = 0 ; i < count[0] ; i ++ ){
10         nums[index++] = 0;
11     for( int i = 0 ; i < count[1] ; i ++ ){
12         nums[index++] = 1;
13     for( int i = 0 ; i < count[2] ; i ++ ){
14         nums[index++] = 2;
15     }
16 }
View Code

方法2

 1 void sortColors1(vector<int>& nums){
 2     int zero = -1;
 3     int two = nums.size();
 4     for( int i = 0 ; i < two ; ){
 5         if( nums[i] == 1 )
 6             i ++;
 7         else if( nums[i] == 2 ){
 8             two --;
 9             swap( nums[i] , nums[two] );    
10         }else{
11             assert( nums[i] == 0 );
12             zero ++;
13             swap( nums[zero] , nums[i] );
14             i ++;
15         }
16     }
17 }
View Code

类似问题

扫描二维码关注公众号,回复: 9852322 查看本文章

215 Kth Largest Element in an Array

猜你喜欢

转载自www.cnblogs.com/cxc1357/p/12501708.html