You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

迭代生成给定数组所有子集的时间与空间复杂度分析

子集生成代码的时间与空间复杂度分析

代码回顾

public List<List<Integer>> subsets(int[] nums) {
    List<List<Integer>> subsets = new ArrayList();
    subsets.add(new ArrayList());
    int pos = 0;
    while(pos < nums.length){
        int currentSize = subsets.size();
        for(int i = 0; i < currentSize; i++){
            List<Integer> copy = new ArrayList(subsets.get(i));
            copy.add(nums[pos]);
            subsets.add(copy);
        }
        pos++;
    }
    return subsets;
}

时间复杂度分析

你说子集总数是2^N没错,但代码的耗时不能只看子集的数量——生成每个子集时需要复制已有子集的元素,这部分操作的开销必须算进去。

具体拆解:

  • 处理数组中第k个元素时,需要复制当前已有的2^k个子集,每个子集的复制时间等于该子集的元素个数。
  • 把所有复制操作的总工作量加起来,本质是计算所有子集的元素总数之和。对于每个元素,它会出现在2(N-1)个子集里(剩下的N-1个元素可选可不选),因此总元素数为N*2(N-1)。
  • 最终时间复杂度为 **O(N*2N)**,这就是耗时比单纯2N高的原因:我们不是只统计子集数量,而是要实际构建每个子集的元素集合,这涉及大量的元素复制操作。

空间复杂度分析

空间复杂度由最终存储的所有子集的元素总数决定:

  • 最终要存储2N个子集,总元素数是N*2(N-1),每个元素都占用内存空间。
  • 因此空间复杂度也是 O(N*2^N)。

内容的提问来源于stack exchange,提问作者Rather Odd

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 13:33:18