我正在编写一个代码挑战的解决方案,我认为从逻辑角度看代码似乎还不错。
问题提示: 有些人在公园里连续站着。它们之间有不能移动的树。您的任务是按照人们的身高不降序重新排列他们的高度,而不移动树木。人可能很高!
E.G:
对于= = return Stepper(
key: Key("mysuperkey-" + items.length.toString()),
...
);
,
输出应该是
sortByHeight(a)= [-1, 150, 190, 170, -1, -1, 160, 180]
。
[-1, 150, 160, 170, -1, -1, 180, 190]
我在做什么-
1)遍历inp数组并存储非-1或树的值。
2)对缓冲区数组进行排序。
3)再次循环遍历inp数组,如果value不为-1,则将其替换为缓冲区数组中的第一个元素,然后删除该元素。
有效输入-
function sortByHeight(a) {
var buff = [];
for(var i=0; i<a.length; i++){
if(a[i] !== -1)
buff.push(a[i]);
}
if(buff.length === 0)
a = a.sort((v1, v2) => (v1 > v2))
else{
buff = buff.sort((a, b) => (a > b));
for(i=0; i<a.length; i++){
if(a[i] !== -1){
a[i] = buff[0];
buff.shift();
}
}
}
return a;
}
此输入失败,无法完成其他输入-
输入:
a: [-1, 150, 190, 170, -1, -1, 160, 180]
a: [-1, -1, -1, -1, -1]
a: [4, 2, 9, 11, 2, 16]
a: [2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1]
a: [23, 54, -1, 43, 1, -1, -1, 77, -1, -1, -1, 3]
a: [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1]
我的输出:
a: [964, 735, 365, 864, 764, 689, 163, 886, 63, 263, 333, 299, 451, 62, 983, 3, 340, 115, 626, 576, 598, 407, 189, 975, 874, 78, 650, 598, 198, 522, 857, 501, 48, 982, 758, 630, 313, 647, 358, 351, 288, 29, 386, 377, 736, 743, 899, 596, 263, 374]
预期输出:
[78, 374, 365, 263, 29, 288, 163, 351, 63, 263, 333, 299, 358, 62, 313, 3, 340, 115, 48, 198, 189, 630, 407, 377, 386, 647, 735, 598, 576, 522, 596, 501, 626, 689, 451, 598, 650, 975, 964, 886, 864, 764, 874, 758, 736, 743, 899, 857, 982, 983]