zoukankan      html  css  js  c++  java
  • 406_根据身高重建队列_数组_中等

    我的思路是先看前面的比自己高的人个数进行排序,人个数相等下肯定个子小的在前面,依次类推。

     public int[][] reconstructQueue(int[][] people) {
            int index = 0;  //表示已经排好的人数
            int[][] queue = new int[people.length][2];
            int flag[] = new int[people.length];
            while (true) {
                if (index == 0) {
                    int min = Integer.MAX_VALUE;
                    int place = 0;
                    for (int i = 0; i < queue.length; i++) {
                        if (people[i][1] == 0 && people[i][0] < min) {
                            queue[0][0] = people[i][0];
                            queue[0][1] = people[i][1];
                            place = i;
                            min = people[i][0];
                        }
                    }
                    flag[place] = 1;
                    index++;
                } else {
                    int place = 0;
                    int min = Integer.MAX_VALUE; //获取满足条件的身高最小值
                    for (int i = 0; i < people.length; i++) {
                        if (flag[i] == 0 && min > people[i][0]) {
                            int num = 0;//比我高的
                            for (int j = 0; j < index; j++) {
                                if (queue[j][0] >= people[i][0]) {
                                    num++;
                                    if (num > people[i][1]) break;
                                }
                            }
                            if (num == people[i][1]) {
                                queue[index][0] = people[i][0];
                                queue[index][1] = people[i][1];
                                place = i;
                                min = people[i][0];
                            }
    
                        }
                    }
                    flag[place] = 1;
                    index++;
                }
                if (index >= people.length) break;
            }
            //        for (int i = 0; i < queue.length; i++) {
    //
    //            System.out.print(queue[i][0]);
    //            System.out.print(" ");
    //            System.out.println(queue[i][1]);
    //
    //        }
            return queue;
        }

    官网的思路大致相同先是对身高进行排序,认为身高越高的在前面的可能性更大,身高相同则比自己高的个数多的再后,之后进行判断排序,比自己高的数量相等下个子低会插到前面,注意二维数组的排序方法。

        public int[][] reconstructQueue1(int[][] people){
            Arrays.sort(people, new Comparator<int[]>() {
                @Override
                public int compare(int[] o1, int[] o2) {
                    if(o1[0] != o2[0]){
                        return o2[0] - o1[0];
                    }else{
                        return o1[1] - o2[1];
                    }
                }
            });
    
            ArrayList<int []> list = new ArrayList<>();
            for (int i = 0; i < people.length; i++) {
                if(list.size()==people[i][1]){
                    list.add(people[i]);
                }else{
                    list.add(people[i][1],people[i]);
                }
            }
            int [][] Array = new int[people.length][2];
            for (int i = 0; i < people.length; i++) {
                Array[i] = list.get(i);
            }
            return Array;
        }
    作者:你的雷哥
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须在文章页面给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    ASIX配置vlan tag能被wireshark获取
    翻译-cmake教程
    Manjaro打造开发环境
    Frida入门
    安卓应用启动底层执行逻辑
    集合框架
    oracle清除日志内存
    flutter widgets目录
    给设备添加udid
    5.class
  • 原文地址:https://www.cnblogs.com/henuliulei/p/15345537.html
Copyright © 2011-2022 走看看