【发布时间】:2021-06-25 11:38:06
【问题描述】:
我正在为一份工作申请在 HackerRank 上做一些编码挑战,虽然我能够成功完成所有逻辑,但我在性能方面总是落后。大多数时候它与嵌套的 for 循环有关(我假设)。这将在 O(n^2) 时间内运行,但我假设挑战要求我比这更快地完成它。
谁能建议如何提高性能?下面是我制作的示例代码。它通过了逻辑测试用例,但性能超时失败。
public static long maxValue(int n, List<List<Integer>> rounds) {
int[] investments = new int[n+1];
for (int i = 0; i < rounds.size(); i++) {
List<Integer> newList = rounds.get(i);
for(int k = newList.get(0); k <= newList.get(1); k++) {
System.out.println(k);
investments[k] += newList.get(2);
}
}
int maxInt = Arrays.stream(investments).max().getAsInt();
return maxInt;
}
我有点犹豫发布代码应该做什么,因为害怕人们认为这是家庭作业,但问题是:
【问题讨论】:
-
你错过了代码应该做什么?
-
出于性能目的,尝试使用字典 O(1) 而不是列表 O(n),因为在迭代过程中一个比另一个花费更多的时间。
-
@HarrisMinhas 我无法更改参数
-
唯一可以做的事情是,如果您对正在定义的新变量投资使用哈希集而不是列表。根据 mkyong.com/java/…>,for 循环是迭代中最快的
-
@HarrisMinhas 的建议与这个问题无关。他们认为无能为力的结论是不正确的。我现在正在制定一个正确的答案。
标签: java performance for-loop