zoukankan      html  css  js  c++  java
  • [编程题] [编程题] 荷兰棋问题

    [编程题] 荷兰棋问题

    题目信息

    ​ 要求把数组中的指定起始位置的元素按照比p小的放一边,比p大的放一边,等于p的放中间.返回相同值的索引值

    思路

    左边用一个指针不断框比p小的,右边一个指针不断框比p大的,然后中间的值不动。

    注意

    右边的值交换过来的话,是需要重新对这个值进行一次判断的,而不能直接index++.

    Java代码

    package interviewcode;
    
    import com.sun.xml.internal.ws.client.MonitorRootClient;
    
    import java.util.Arrays;
    
    /**
     * @author jiyongjia
     * @create 2020/8/8 - 21:02
     * @descp: 要求把数组中的比p小的放一边,比p大的放一边,等于p的放中间.返回相同值的索引值
     */
    public class P27_荷兰国棋 {
        public static void main(String[] args) {
            int[] ints = {2, 3, 21, 21, 4, 2, 5, 3, 723, 223, 12, 63};
            System.out.println(Arrays.toString(ints));
            int[] test = test(ints, 0, ints.length - 1, 21);
            //打印出了相同值的索引第位置
            System.out.println(Arrays.toString(test));
            System.out.println(Arrays.toString(ints));
        }
    
        public static int[] test(int[] arr,int L,int R,int p){
            int l = L-1;
            int r = R+1;
            int cur = L;
            while (cur< r){
                if(arr[cur] < p){
                    swap(arr,++l,cur++);
                }else if(arr[cur] > p){
                    swap(arr,--r,cur);  //这里先别变,再判断一次这个值【注意】
                }else{
                    cur++;
                }
            }
            return new int[]{l+1,r-1};
        }
    
        private static void swap(int[] arr, int i, int j) {
            int temp = arr[i];
            arr[i] = arr[j];
            arr[j] = temp;
        }
    }
    
    

    输出:

    以21为例

    image-20200808220724584

  • 相关阅读:
    python学习笔记(五)os、sys模块
    Lepus_天兔的安装
    python学习笔记(四)random 、json模块
    python学习笔记(三)函数
    Jenkins的安装及邮件配置
    Nginx+tomcat配置负载均衡集群
    python学习笔记(二)文件操作和集合
    python练习
    Jmeter(十)Linux下配置安装Jmeter及执行测试任务
    Jmeter(九)压力测试
  • 原文地址:https://www.cnblogs.com/jiyongjia/p/13460636.html
Copyright © 2011-2022 走看看