比方说我有这个问题。
https:/www.hackerrank.comchallengesbirthday-cake-candlesproblem
我想出了这个办法
function bcc(arr) {
let res = 0;
for (let i = 0; i < arr.length; i++) {
if (arr[i] == Math.max(...arr)) {
res++;
}
}
return res;
}
console.log(bcc([4, 4, 3, 1]));
现在,对于一个数组,比如 [4, 4, 3, 1]
它工作得很好。但是HackerRank刚刚给了我这个有100,000个元素的巨大数组,而预期的输出是 7147
. 我的代码超时了,我错了59个问题。
你能不能给我一个更快的解决方案,我可以使用,也许也可以用于其他问题?
解决方案:
计算数组的最大值 先期,而不是在每次迭代时,使用 reduce
为简洁起见。
function birthdayCakeCandles(ar) {
const max = Math.max(...ar);
return ar.reduce((a, b) => a + (b === max), 0);
}
这将总体计算的复杂性从 O(n ^ 2)
到 O(n)
.
或者,更接近你的原始代码。
function birthdayCakeCandles(arr) {
const max = Math.max(...arr);
let res = 0;
for (let i = 0; i < arr.length; i++) {
if (arr[i] == max) {
res++;
}
}
return res;
}