荷兰国旗问题

【题目】难度:1星

 

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

(把一组数据按一个标志分成三份,左边的都小于标志数,中间的都等于标志数,右边的都大于标志数)

 【代码】

package test;
import java.util.*;

public class Main{
    public static void main(String[] args){
        int[] arr= {1,6,3,5,6,7,6,9,2,4,6,8};
        sort(arr,4);
        System.out.println(Arrays.toString(arr));
        
    }
    
    public static void sort(int[] arr, int tar){
        //注意这里的设定,规定左右索引为-1和len
        int min = -1;
        int max = arr.length;
        int i = 0;
        while (i<max){
        	if(arr[i]<tar) {
        		swap(arr,i,min+1);
        		min++;
        		i++;
        	}else if(arr[i]>tar) {
        		swap(arr,i,max-1);
        		max--;
        	}else {
        		i++;
        	}
        }
    }
    
    public static void swap(int[] arr, int i,int j) {
    	int x = arr[i];
    	arr[i] = arr[j];
    	arr[j] = x;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值