首页 > 解决方案 > 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;
    }
}

感谢您的时间。

标签: javaalgorithmjava-stream

解决方案


推荐阅读