java - Java流开销的原因和影响
问题描述
我正在研究LeetCode上的排列问题。我尝试了两个相同的解决方案,除了第一个使用 Java 流而另一个不使用。两者都被接受了,但第一个花了 38 毫秒,第二个的运行时间可以忽略不计(0 毫秒)。我想知道造成如此巨大差异的原因是什么。以下是我的代码
解决方案 1
import java.util.*;
import java.util.stream.Collectors;
class Solution {
List<List<Integer>> ans = new LinkedList<>();
private void swap(int[] nums, int i, int j) {
int t = nums[i];
nums[i] = nums[j];
nums[j] = t;
}
private void permutation(int[] nums, int pos) {
if (pos == nums.length - 1) {
// List<Integer> temp = new LinkedList<>();
// for (int n : nums)
// temp.add(n);
// ans.add(temp);
ans.add(Arrays.stream(nums).boxed().collect(Collectors.toList()));
}
for (int i = pos; i < nums.length; i++) {
swap(nums, i, pos);
permutation(nums, pos + 1);
swap(nums, i, pos);
}
}
public List<List<Integer>> permute(int[] nums) {
permutation(nums, 0);
return ans;
}
}
解决方案 2
import java.util.*;
import java.util.stream.Collectors;
class Solution {
List<List<Integer>> ans = new LinkedList<>();
private void swap(int[] nums, int i, int j) {
int t = nums[i];
nums[i] = nums[j];
nums[j] = t;
}
private void permutation(int[] nums, int pos) {
if (pos == nums.length - 1) {
List<Integer> temp = new LinkedList<>();
for (int n : nums)
temp.add(n);
ans.add(temp);
// ans.add(Arrays.stream(nums).boxed().collect(Collectors.toList()));
}
for (int i = pos; i < nums.length; i++) {
swap(nums, i, pos);
permutation(nums, pos + 1);
swap(nums, i, pos);
}
}
public List<List<Integer>> permute(int[] nums) {
permutation(nums, 0);
return ans;
}
}
感谢您的时间。
解决方案
推荐阅读
- powershell-4.0 - Invoke-WebRequest - 此请求的授权已被拒绝
- svn - 如何恢复 SVN 存储库?
- c# - 可以在用户定义的函数中获取用户的输入吗?
- python - 如何在 python 中编写嵌套并发?
- kotlin - 将一组键映射到匹配的列表列表
- javascript - html2canvas 图像不保存
- php - 复选框确定 mysqli 查询
- amazon-web-services - 我是否需要使用 Kinesis Data Streams(如果我使用 Firehose)将数据流式传输到镶木地板?
- git - 克隆后记住多个 git 远程 url
- python - 无法使用 jquery-datatables 自定义表以在显示端进行排序/过滤/排序