您的位置:首页 > 产品设计 > UI/UE

LeetCode:406. Queue Reconstruction by Height

2017-09-07 18:22 246 查看
Suppose you have a random list of people standing in a queue. Each person is described by a pair of integers
(h, k)
, where
h
is the height of the person and
k
is the number of people in front of this person who have a height greater than or equal to
h
. Write an algorithm to reconstruct the queue.

Note:

The number of people is less than 1,100.

Example
Input:
[[7,0], [4,4], [7,1], [5,0], [6,1], [5,2]]

Output:
[[5,0], [7,0], [5,2], [6,1], [4,4], [7,1]]


题意: n个人组成的序列,每个人包含两个属性(h,k),其中h表示身高,k表示在该人前面和他相等或者高于他的人的数目。输入的序列是打乱的序列,输出正确的序列。

分析: 正确的序列的特点如下:假设最矮的那个人A1的属性是(h1,k1),那么A必然在剩余序列的第k1个位置(从0开始),如果存在多个最矮的人A1(h1,k1),A2(h1,k2)…Am(h1,km),那么A’(k’=max(k))必然在所有最矮的人的后面。因此可以按照k递减的次序确定A在剩余序列中的位置。

代码如下:

class Solution {
public int[][] reconstructQueue(int[][] people) {
if(people==null||people.length==0)
return people;
Arrays.sort(people,new Comparator(){
@Override
public int compare(Object a,Object b){
int[]a1=(int[])a;
int[]b1=(int[])b;
if(a1[0]!=b1[0])
return a1[0]-b1[0];//按照身高升序排序
return b1[1]-a1[1];//按照k值降序排列
}
});
int n=people.length;
ArrayList<Integer> index=new ArrayList<Integer>();
for(int i=0;i<n;i++)
index.add(i);
int[][]result=new int
[2];
for(int i=
a7cd
0;i<n;i++){
int t=index.remove(people[i][1]);//确定当前people在剩余序列中的位置
result[t][0]=people[i][0];
result[t][1]=people[i][1];
}
return result;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: