• 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;
    }
  • 相关阅读:
    序列合并
    基础数论函数练习题
    Chirp Z-Transform
    [IOI2020]数蘑菇
    springboot devtools 依赖
    RestTemplate的使用(项目实例)
    Springboot事件监听实例
    HttpClient的使用(项目实例)
    通过http方式传递base64图片字符串无法还原成图片的原因
    springboot实现滑动验证码(redis+token+base64)
  • 原文地址:https://www.cnblogs.com/zhaohuan1996/p/12749674.html
Copyright © 2020-2023  润新知