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]]
这道题目的意思是,让数组的排序合乎逻辑。
我想到的方法是,先排people[i][0]=0的人,再依次排people[i][0]=1,2,3,4的人。
/**
* @param {number[][]} people
* @return {number[][]}
*/
var reconstructQueue = function(people) {
var count = 0;
var max=0;
var ret=[]
people.sort(sortFun2);
//先把第二位是0的抽出来排一次
for(var i=0;i<people.length;i++){
if(max<people[i][1]){max=people[i][1];}
if(people[i][1]==0){
ret.push(people[i]);
}
}
ret.sort(sortFun);
while(count<=max){
count++
for(var i = 0 ; i <people.length ;i++){
if(people[i][1]===count)
{
//相等则插入
var num=0;
for(var j=0;j<ret.length;j++){
if(people[i][0]<=ret[j][0]){
num++;
if(num==count){
ret.splice(j+1,0,people[i]);
break;
}
}
}
}
}
}
return ret;
};
function sortFun(arr1,arr2){
return arr1[0]-arr2[0];
}
function sortFun2(arr1,arr2){
return arr2[0]-arr1[0];
}
这里有个需要注意的点就是:在排序之前要对people进行降序排列,才能在
ret.splice(j+1,0,people[i]);
的时候保证顺序正确。