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

  • 相关阅读:
    CSS处理小技巧
    React 脚手架构建
    Tomcat8学习
    javaScript(ES5中的类,原型,原型对象和函数对象的关系)
    保留两位小数(逢5进位,精度不会丢失)
    获取过去12个月
    mybatis 踩坑记录
    动态代理--jdk和cglib
    lambda表达式
    mybatis的mapper映射配置文件详解
  • 原文地址:https://www.cnblogs.com/cxc1357/p/12501708.html
Copyright © 2011-2022 走看看