[刷题] LeetCode 75 Sort Colors

Posted cxc1357

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[刷题] LeetCode 75 Sort Colors相关的知识,希望对你有一定的参考价值。

要求

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

思路

  • 方法1:遍历数组,利用辅助数组保存三个元素的个数,再写入(遍历两遍)
    • 辅助数组有三个元素,对应0 1 2的个数
  • 方法2:模拟三路快排,遍历一遍完成排序
    • 三个索引,zero和two用于首尾的扩充,i用于遍历
    • 遍历数组,每个元素只有三种可能
    • 0 2移到首尾,1不动

 

实现

方法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

相关

215 Kth Largest Element in an Array

以上是关于[刷题] LeetCode 75 Sort Colors的主要内容,如果未能解决你的问题,请参考以下文章

刷题75. Sort Colors

[leetcode sort]75. Sort Colors

Leetcode 75. Sort Colors

[leetcode-75-Sort Colors]

Leetcode 75. Sort Colors

LeetCode 75 Sort Colors