HackerRank中的生日蛋糕蜡烛(简单的循环问题)

时间:2020-03-31 04:20:59

标签: javascript arrays for-loop

这是第一篇文章。 :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;

}

谢谢。

1 个答案:

答案 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)