荷兰国旗问题

Posted dloading

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了荷兰国旗问题相关的知识,希望对你有一定的参考价值。

给定一个整数数组,给定一个值K,这个值在原数组中一定存在,要求把数组中小于K的元素放到数组的左边,大于K的元素放到数组的右边,等于K的元素放到数组的中间,最终返回一个整数数组,其中只有两个值,分别是等于K的数组部分的左右两个下标值。

思路:设定一个小于区less,跟大于区more,以及一个指向数组L位置的下标cur(给定数组区间的最前下标),当数组元素小于给定值时,交换数组元素跟小于区的下一个元素,下标cur+1。当数组元素大于给定值的时候,交换数组元素跟大于区的上一个元素,此时由于大于区的上一个元素元素并不知道跟给定值的关系。所以下标cur不做处理。当数组元素跟给定值相等时,cur+1package ZuoShenJiChu; 

import java.util.Arrays;

public class Demo2 {
    public static void main(String[] args) {
        int arr[]={5,3,4,1,5,7,6,1,5,2};
        int a[]=partition(arr,0,arr.length-1,5);
        System.out.println(Arrays.toString(a));
    }
    public static int [] partition(int arr[],int L,int R,int num)
    {
        int less=L-1;
        int more=R+1;
        int cur=L;
        while (cur<more)
        {
            if(arr[cur]<num)
            {
                swap(arr,++less,cur++);
            }else if (arr[cur]>num){
                swap(arr,--more,cur);
            }else {
                cur++;
            }
        }
        return new int[]{less+1,more-1};
    }
    public static void swap(int []arr,int i,int j)
    {
        int temp=arr[i];
        arr[i]=arr[j];
        arr[j]=temp;
    }
}

 

以上是关于荷兰国旗问题的主要内容,如果未能解决你的问题,请参考以下文章

荷兰国旗问题

算法荷兰国旗问题

荷兰国旗问题

图灵机上的荷兰国旗

NYOJ_268_荷兰国旗问题

编程之法:面试和算法心得(荷兰国旗)