java - 由于我的黑客等级解决方案超时而终止
问题描述
大家好,请检查问题HackerRank 问题陈述
这是我对上述问题的解决方案(链接)
static int migratoryBirds(List<Integer> arr) {
int ar[]=new int[arr.size()];
for(int i=0;i<arr.size();i++){
ar[i] = Collections.frequency(arr,arr.get(i));
// ar[i] = obj.occuranceOfElement(arr,arr.get(i));
}
int maxAt = 0;
for (int i = 0; i < ar.length; i++) {
maxAt = ar[i] > ar[maxAt] ? i : maxAt;
}
return arr.get(maxAt);
}
当数组大小较大时,我的代码无法处理,例如数组中的 17623 个元素。
因超时而终止
问题出在第二个 for 循环中,它遍历数组并为我提供数组中最大数的索引。有没有其他方法可以提高性能。
解决方案
您的问题是对 Colletions.frequency 的调用,这是一个 O(N) 操作。当您从循环内部调用它时,它变为 O(N²) 并且会占用您所有的时间。
另外,你确定你收到了哪个 List 实现?如果实现是 LinkedList,您调用 list.get(i) 也可能是 O(N)。
本练习的目标是计算输入中每个值的频率。您需要一个地方来存储和增加每个值的出现次数,并且您需要存储输入的最大值。
您还跳过了规范的关键部分。输入有限制,这使得解决问题比你现在想象的更容易。
推荐阅读
- c - for 循环中的 and 运算符和 or 运算符有什么区别?
- python - 如果第 1 列值小于第 2 列,如何交换第 1 列第 2 列值的条件,那么我想交换
- python - 如何使用条件更新字典的值?
- wordpress - 安装步骤 2 上 Azure 404 上的 Wordpress 错误
- owl - graphdb 推理根据值范围对个体进行分类
- python - 我正在尝试从一个非常简单的 Docker 容器中运行 python 脚本。脚本在我的机器上按预期运行,但不在容器上
- javascript - 谷歌表格“成功处理程序”输出到变量
- python - pymc3 错误。AttributeError:模块“arviz”没有属性“geweke”
- html - 如何使网格内的文本拉伸
- azure-devops - 在 pipelne.yml 中扩展模板之前的存储库自检出