zoukankan      html  css  js  c++  java
  • [刷题] 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

  • 相关阅读:
    linksys wrt160nv3 刷dd-wrt固件
    win2008 r2 远程桌面问题
    windows server 2008 集成raid卡驱动
    gitlab-ce
    git
    批量发布jar包springboot应用
    gradle
    lvs
    rsyslog
    特殊权限
  • 原文地址:https://www.cnblogs.com/cxc1357/p/12501708.html
Copyright © 2011-2022 走看看