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; }
作者:你的雷哥
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须在文章页面给出原文连接,否则保留追究法律责任的权利。