Arrays.stream(array_name).sum() 是否比迭代方法慢?
我正在编写一个leetcode问题:https://oj.leetcode.com/problems/gas-station/ 使用Java 8。
当我过去计算总和时,我的解决方案得到了TLE,而相同的解决方案被接受使用迭代来计算数组中元素的总和。这个问题的最佳时间复杂度是O(n),当使用Java 8的流API时,我很惊讶地得到了TLE。我只在O(n)中实现了解决方案。Arrays.stream(integer_array).sum()
import java.util.Arrays;
public class GasStation {
public int canCompleteCircuit(int[] gas, int[] cost) {
int start = 0, i = 0, runningCost = 0, totalGas = 0, totalCost = 0;
totalGas = Arrays.stream(gas).sum();
totalCost = Arrays.stream(cost).sum();
// for (int item : gas) totalGas += item;
// for (int item : cost) totalCost += item;
if (totalGas < totalCost)
return -1;
while (start > i || (start == 0 && i < gas.length)) {
runningCost += gas[i];
if (runningCost >= cost[i]) {
runningCost -= cost[i++];
} else {
runningCost -= gas[i];
if (--start < 0)
start = gas.length - 1;
runningCost += (gas[start] - cost[start]);
}
}
return start;
}
public static void main(String[] args) {
GasStation sol = new GasStation();
int[] gas = new int[] { 10, 5, 7, 14, 9 };
int[] cost = new int[] { 8, 5, 14, 3, 1 };
System.out.println(sol.canCompleteCircuit(gas, cost));
gas = new int[] { 10 };
cost = new int[] { 8 };
System.out.println(sol.canCompleteCircuit(gas, cost));
}
}
当解决方案被接受时,我评论以下两行:(使用流计算总和)
totalGas = Arrays.stream(gas).sum();
totalCost = Arrays.stream(cost).sum();
并取消注释以下两行(使用迭代计算总和):
//for (int item : gas) totalGas += item;
//for (int item : cost) totalCost += item;
现在,解决方案被接受。为什么 Java 8 中的流 API 对于大型输入比对于基元的迭代慢?