刷题百天计划 Day19 荷兰国旗问题 中等

233 阅读1分钟

学习目标:

我会持续更新我独特的算法思路,希望能给大家带来不一样的思维拓展! 如果大家感觉有帮助的话,欢迎点赞关注支持哦! 你们的鼓励是我坚持下去的动力! !!!

学习内容:

堆排序 牛客网链接 在这里插入图片描述 在这里插入图片描述

学习时间:

2022.4.10

学习产出:

问题1:数组分界

在这里插入图片描述 解决方案 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述

在这里插入图片描述

问题二:荷兰国旗问题

在这里插入图片描述 在这里插入图片描述

在这里插入图片描述 在这里插入图片描述 在这里插入图片描述

using System;
 
class test{
    static void Main(){
        string[] getin=Console.ReadLine().Split(' ');
        int count=Convert.ToInt32(getin[0]);
        int Target=Convert.ToInt32(getin[1]);
        string[] input=Console.ReadLine().Split(' ');
         
        int[] arr=new int[count];
        for(int i=0;i<count;i++){
            arr[i]=Convert.ToInt32(input[i]);
        }
         
        int[] res=partition(arr,0,count-1,Target);
        if(res[0]>res[1]){
            Console.WriteLine(-1+" "+-1);
        }else{
             Console.WriteLine(res[0]+" "+res[1]);
        }
        
    }
     
    static int[] partition(int[] arr,int L,int R,int P){
         
        int less=L-1;
        int more=R+1;
        int index=L;
        while(index<more){
            if(arr[index]<P){
                Swap(arr, ++less, index++);
            }else if(arr[index]>P){
                Swap(arr, --more, index);
            }else{
                index++;
            }
        }
        return new int[]{less+1,more-1};
    }
     
    static void Swap(int[] arr,int i,int j){
        int temp=arr[i];
        arr[i]=arr[j];
        arr[j]=temp;
    }
}