码迷,mamicode.com
首页 > 其他好文 > 详细

荷兰国旗问题

时间:2019-05-03 22:40:56      阅读:144      评论:0      收藏:0      [点我收藏+]

标签:相等   思路   下标   要求   返回   左右   nbsp   while   import   

给定一个整数数组,给定一个值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;
    }
}

 

荷兰国旗问题

标签:相等   思路   下标   要求   返回   左右   nbsp   while   import   

原文地址:https://www.cnblogs.com/dloading/p/10806840.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!