目录
题目
假设有打乱顺序的一群人站成一个队列。 每个人由一个整数对(h, k)表示,其中h是这个人的身高,k是排在这个人前面且身高大于或等于h的人数。 编写一个算法来重建这个队列。
注意:
总人数少于1100人。
示例
输入:
[[7,0], [4,4], [7,1], [5,0], [6,1], [5,2]]
输出:
[[5,0], [7,0], [5,2], [6,1], [4,4], [7,1]]
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/queue-reconstruction-by-height
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
运行时间
可以看出效率很低/(ㄒoㄒ)/~~
代码
class Solution { public int[][] reconstructQueue(int[][] people) { Arrays.sort(people, new Comparator<int[]>() {//按照数组第二个数升序排序,第二个数想通过的话,按照第一个数升序排序 public int compare(int[] a, int[] b) { // TODO Auto-generated method stub if (a[1] != b[1]) { return a[1] - b[1]; } else { return a[0] - b[0]; } } }); for (int i = 1; i < people.length; i++) { int f = 0;//标记大于等于当前身高的个数 for (int j = 0; j < i; j++) { if (people[j][0] >=people[i][0]) { f++; } } int dist=f-people[i][1];//计算差值 if(dist!=0) {//如果差值为0,不需要移动 int []arr=new int[2]; arr=people[i];//记录需要移动的数组 for(int z=0;z<dist;z++) { people[i-z]=people[i-z-1];//向后移动dist次 } people[i-dist]=arr; } } return people; } }