荷兰国旗问题
Posted dloading
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了荷兰国旗问题相关的知识,希望对你有一定的参考价值。
给定一个整数数组,给定一个值K,这个值在原数组中一定存在,要求把数组中小于K的元素放到数组的左边,大于K的元素放到数组的右边,等于K的元素放到数组的中间,最终返回一个整数数组,其中只有两个值,分别是等于K的数组部分的左右两个下标值。 思路:设定一个小于区less,跟大于区more,以及一个指向数组L位置的下标cur(给定数组区间的最前下标),当数组元素小于给定值时,交换数组元素跟小于区的下一个元素,下标cur+1。当数组元素大于给定值的时候,交换数组元素跟大于区的上一个元素,此时由于大于区的上一个元素元素并不知道跟给定值的关系。所以下标cur不做处理。当数组元素跟给定值相等时,cur+1。 package 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; } }
以上是关于荷兰国旗问题的主要内容,如果未能解决你的问题,请参考以下文章