这是第一篇文章。 :D
在这里看不到我要解决的问题:https://www.hackerrank.com/challenges/birthday-cake-candles/problem。
除一项测试外,所有测试均通过;最后一个继续失败。
其他人也提出了问题,但是他们使用了不同的策略,但是测试失败的案例相同:Birthday cake candles- hackerrank。
这是我的代码:
function birthdayCakeCandles(ar) {
ar = ar.sort();
let high = [];
for(let i = 0; i < ar.length; i++){
if (ar[i] === ar[ar.length -1]){
high.push(ar[i]);
}
}
return high.length;
}
谢谢。
答案 0 :(得分:1)
嗯...我对您的代码有很好的了解,而且我敢肯定它是正确的!
我不确定hackerrank如何测试您的代码,但是也许您需要更多的优化?像这样的东西:将最大值存储为变量,这样您就不必在每次迭代时都将其计算出来……将数字存储到high
而不是存储数组(因为您只需要最高蜡烛数)。
function birthdayCakeCandles(ar) {
ar = ar.sort();
let highest = ar[ar.length-1] //calculate once only
let high = 0;
for(let candle of ar){
if (candle === highest){
high ++; //incrementing
}
}
return high;
}
birthdayCakeCandles([1,2,3,4,5,3,2,5,4,1,2]) //2
或使用indexof
方法。
function birthdayCakeCandles(ar) {
ar = ar.sort();
let highest = ar[ar.length-1]
return ar.length - ar.indexOf(highest);
}
birthdayCakeCandles([1,2,3,3,2,1,5,5,6,4,6,4,3,2,2,2,2]) //2
编辑:哦,我知道为什么某些输入大小写不起作用。基本上,Array.sort()
函数按字母顺序对进行排序。这意味着“ 25”将被视为大于“ 100”。
显然,最好的方法是将函数传递给 sort()方法以数字方式处理项目。在developer.mozilla.org中,使用
numbers.sort(function(a, b) {
return a - b;
})
要缩短它,可以使用箭头功能。
numbers.sort((a, b) => a - b)
因此,只需将所有ar.sort()
替换为ar.sort((a, b) => a - b)