zoukankan      html  css  js  c++  java
  • 75.颜色分类

    方法一:

    两遍扫描:

    扫描第一遍,记录0、1、2的个数;

    扫描第二遍,重填数组。

    /*
    
    */
    #include<stdio.h>
    #include<malloc.h>
    #include<string.h>
    #include<stdlib.h>
    #include<math.h>
    #include<string.h>
    #include<iostream>
    void sortColors(int* nums, int numsSize){
    
        int i,j,k,n=numsSize,t;
        i=j=k=0;
        for(t=0;t<n;t++){
            if(nums[t]==0) i++;
            if(nums[t]==1) j++;
            if(nums[t]==2) k++;
        }
        t=0;
        while(t<n){
                printf("1
    ");
            while(i){
                nums[t]=0;
                i--;
                t++;
            }
            while(j){
                nums[t]=1;
                j--;
                t++;
            }
            while(k){
                nums[t]=2;
                k--;
                t++;
            }
    
        }
    }
    int main()
    {
        int* nums, numsSize=6,a[6]={2,0,2,1,1,0},i;
        nums=(int*)malloc(sizeof(int)*6);
    
        nums=a;
    
        sortColors(nums,numsSize);
        for(i=0;i<numsSize;i++){
            printf("%d ",nums[i]);
        }
        //printf("%d
    ",rs);
        return 0;
    }

     方法二:

    荷兰国旗问题,实则是三指针快排。

    用p0记录0的最右边界;cur记录1的位置;p2记录2的最左边界。

    1、初始化

    p0=0;cur=0;p2=numsSize-1;

    2、循环(cur<=p2)

      如果nums[cur]=0,交换nums[cur]与nums[p0],cur++,p0++;

      如果nums[cur]=1,cur++;

      如果nums[cur]=2,交换nums[cur]与nums[p2],p2--;

    /*
    
    */
    #include<stdio.h>
    #include<malloc.h>
    #include<string.h>
    #include<stdlib.h>
    #include<math.h>
    #include<string.h>
    #include<iostream>
    void swap(int nums[],int i,int j){
        int t=nums[i];
        nums[i]=nums[j];
        nums[j]=t;
    }
    void sortColors(int* nums, int numsSize){
        int p0=0,p2=numsSize-1,cur=0;
        while(cur<=p2){
            if(nums[cur]==0){
                swap(nums,p0,cur);
                p0++;
                cur++;
            }else if(nums[cur]==2){
                swap(nums,p2,cur);
                p2--;
            }else{
                cur++;
            }
        }
    }
    int main()
    {
        int* nums, numsSize=6,a[6]={2,0,2,1,1,0},i;
        nums=(int*)malloc(sizeof(int)*6);
    
        nums=a;
    
        sortColors(nums,numsSize);
        for(i=0;i<numsSize;i++){
            printf("%d ",nums[i]);
        }
        //printf("%d
    ",rs);
        return 0;
    }
  • 相关阅读:
    笨方法学python中执行argv提示ValueError: not enough values to unpack (expected 4, got 1)
    VMware workstation安装
    Redis bigkey分析
    MySQL drop table 影响及过程
    MySQL 大表硬连接删除
    ES elasticsearch 各种查询
    ES elasticsearch 各种聚合
    ES elasticsearch 聚合统计
    ES elasticsearch 实现 count单字段,分组取前多少位,以地理位置中心进行统计
    MySQL行溢出、varchar最多能存多少字符
  • 原文地址:https://www.cnblogs.com/zhaohuan1996/p/12749674.html
Copyright © 2011-2022 走看看