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

学习目标:

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

学习内容:

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

学习时间:

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;
    }
}

猜你喜欢

转载自blog.csdn.net/m0_48781656/article/details/124182924