为什么以下c ++代码的时间复杂度为O(n ^ n)?

开发人员

这是此lettcode问题的蛮力解决方案:https ://leetcode.com/articles/best-time-to-buy-and-sell-stock-ii/ ,我不明白为什么O会导致时间复杂(n ^ n)。任何人都可以解释一下并引导我完成它,谢谢!

class Solution {
    public int maxProfit(int[] prices) {
        return calculate(prices, 0);
    }

    public int calculate(int prices[], int s) {
        if (s >= prices.length)
            return 0;
        int max = 0;
        for (int start = s; start < prices.length; start++) {
            int maxprofit = 0;
            for (int i = start + 1; i < prices.length; i++) {
                if (prices[start] < prices[i]) {
                    int profit = calculate(prices, i + 1) + prices[i] - prices[start];
                    if (profit > maxprofit)
                        maxprofit = profit;
                }
            }
            if (maxprofit > max)
                max = maxprofit;
        }
        return max;
    }
}
哈什鲁

由于在最内部的循环中有一个递归调用,因此扩展树如下所示

                                        0
                ---------------------------------------------------------
                1                               2   ..                  n
    ------------------------            ---------------------          
    2           3  ..      n            3           4   ..  n   
----------  -------------       ----------   ------------
3   4 .. n  4   5  ..   n       4   5 .. n   5  6   ..  n
                                       ...

在第一行上有n-1O(n)操作,在第二行上有(n-1)+(n-2)+...+1 = n*(n-1)/2O(n^2)操作。同样,在第三行也有O(n^3)操作。树的高度/深度为n因此,继续这种方式将可以进行O(n^n)全部操作。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

时间复杂度-将O(N²)重构为O(N)

来自分类Dev

为什么此算法的空间复杂度为O(n)?

来自分类Dev

为什么这个时间复杂度为O(n)?

来自分类Dev

为什么在redis SET中插入的时间复杂度是O(n)?

来自分类Dev

您将如何使用for循环实现O(C ^ n)时间复杂度函数?

来自分类Dev

该代码的时间复杂度为O(N ^ 2)吗

来自分类Dev

O(N ^ N)是什么复杂度类?

来自分类Dev

为什么该算法的Big-O复杂度为O(n ^ 2)?

来自分类Dev

此代码段的时间复杂度是多少?O(n)或O(logn * logn)

来自分类Dev

如何编写时间复杂度为O(log n)的计算m ^ n的迭代版本?

来自分类Dev

时间复杂度n ^(O(k))表示什么?

来自分类Dev

为什么以下代码的时间复杂度为O(n ^ 2)?

来自分类Dev

为什么置换函数的时间复杂度为O(n!)

来自分类Dev

为什么2 for循环的时间复杂度不是O(N2 ^ N)?

来自分类Dev

为什么是2 for循环不为O(n * 2 ^ n)的时间复杂度?

来自分类Dev

为什么用list.add嵌套循环给出为O(n ^ 4)的时间复杂度?

来自分类Dev

为什么字符串的空间复杂度为O(n)而数字为O(1)?

来自分类Dev

我的代码最差的时间复杂度是log(n)吗?

来自分类Dev

O(n)操作的循环的时间复杂度为2

来自分类Dev

为什么在redis SET中插入的时间复杂度为O(n)?

来自分类Dev

O(C(n,r)^ 2)的大O运行时间复杂度是多少?

来自分类Dev

考虑时间复杂度时,Theta(n)和T(n)有什么区别?

来自分类Dev

Redis时间复杂度为O(log(N)+M)

来自分类Dev

为什么这段代码的时间复杂度是 O(N*N)?

来自分类Dev

这段代码的时间复杂度是 O(N) 吗?

来自分类Dev

为什么哈希表时间复杂度最坏的情况是 O(n)

来自分类Dev

为什么合并 2 个 n 大小的排序数组的时间复杂度是 O(n) 而不是 Θ(n)?

来自分类Dev

为什么我的 python 代码的时间复杂度为 O(N**2)

来自分类Dev

下面的python代码的时间复杂度如何计算为0(n log n)?

Related 相关文章

  1. 1

    时间复杂度-将O(N²)重构为O(N)

  2. 2

    为什么此算法的空间复杂度为O(n)?

  3. 3

    为什么这个时间复杂度为O(n)?

  4. 4

    为什么在redis SET中插入的时间复杂度是O(n)?

  5. 5

    您将如何使用for循环实现O(C ^ n)时间复杂度函数?

  6. 6

    该代码的时间复杂度为O(N ^ 2)吗

  7. 7

    O(N ^ N)是什么复杂度类?

  8. 8

    为什么该算法的Big-O复杂度为O(n ^ 2)?

  9. 9

    此代码段的时间复杂度是多少?O(n)或O(logn * logn)

  10. 10

    如何编写时间复杂度为O(log n)的计算m ^ n的迭代版本?

  11. 11

    时间复杂度n ^(O(k))表示什么?

  12. 12

    为什么以下代码的时间复杂度为O(n ^ 2)?

  13. 13

    为什么置换函数的时间复杂度为O(n!)

  14. 14

    为什么2 for循环的时间复杂度不是O(N2 ^ N)?

  15. 15

    为什么是2 for循环不为O(n * 2 ^ n)的时间复杂度?

  16. 16

    为什么用list.add嵌套循环给出为O(n ^ 4)的时间复杂度?

  17. 17

    为什么字符串的空间复杂度为O(n)而数字为O(1)?

  18. 18

    我的代码最差的时间复杂度是log(n)吗?

  19. 19

    O(n)操作的循环的时间复杂度为2

  20. 20

    为什么在redis SET中插入的时间复杂度为O(n)?

  21. 21

    O(C(n,r)^ 2)的大O运行时间复杂度是多少?

  22. 22

    考虑时间复杂度时,Theta(n)和T(n)有什么区别?

  23. 23

    Redis时间复杂度为O(log(N)+M)

  24. 24

    为什么这段代码的时间复杂度是 O(N*N)?

  25. 25

    这段代码的时间复杂度是 O(N) 吗?

  26. 26

    为什么哈希表时间复杂度最坏的情况是 O(n)

  27. 27

    为什么合并 2 个 n 大小的排序数组的时间复杂度是 O(n) 而不是 Θ(n)?

  28. 28

    为什么我的 python 代码的时间复杂度为 O(N**2)

  29. 29

    下面的python代码的时间复杂度如何计算为0(n log n)?

热门标签

归档