长输入的快速解决方案?

比方说我有这个问题。

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;
}

给TA打赏
共{{data.count}}人
人已打赏
解决方案

Android应用程序,得到错误 "java.lang.NullPointerException: println needs a message"。

2022-5-13 16:00:34

解决方案

Python子进程--运行shell命令,在特定的命令输出上做一些事情。

2022-5-13 16:00:36

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索