<?php
class Solution {
/**
* Q: [[6,0],[5,0],[4,0],[3,2],[2,2],[1,4]]
* S: [[4,0],[5,0],[2,2],[3,2],[1,4],[6,0]]
* 解题思路:先将原队列按身高升序排列,相同身高的按前面比自己高的人数降序排列
* 然后我们再将排列好的元素放入到结果数组中,先放入的元素对后放入的元素没有影响,
* 故在放元素[x,y]时,只须保证该元素前面有y个空位即可,这y个空位是留给身高比自己高
* 的元素的,这些元素在后面插入。
*
* @param Integer[][] $people
* @return Integer[][]
*/
function reconstructQueue($people) {
usort($people, function($x, $y){
if ($x[0] != $y[0]) {
return $x[0] - $y[0];
} else {
return $y[1] - $x[1];
}
});
$len = count($people);
$ans = new SplFixedArray($len);
foreach ($people as $person) {
$frontNum = $person[1];
$i = 0;
while ($frontNum >= 0) {
if (is_null($ans[$i])) {
--$frontNum;
}
++$i;
}
$ans[--$i] = $person;
}
return $ans->toArray();
}
}
$s = new Solution();
var_dump($s->reconstructQueue([[6,0],[5,0],[4,0],[3,2],[2,2],[1,4]]));
根据身高重建队列【php版】
最新推荐文章于 2024-08-31 22:00:00 发布


530

被折叠的 条评论
为什么被折叠?



