为什么这个时间复杂度是O(total*n)呢?

Why is this time complexity O(total*n)?

即我无法理解为什么在最坏的情况下 运行 蓝色部分需要 (total⋅n⋅2)+1 步。

函数代码如下:

可以在 https://www.youtube.com/watch?v=nqlNzOcnCfs.

找到此屏幕截图的视频。

我没有看你链接的视频。但是,查看代码,这看起来像是在计算使用数组 arr.

给出的面额硬币来组成值 total 的不同方法的数量

函数 dp 本质上是用值填充字典 mem。字典 memtotali 索引。在递归调用中,totali 可能(并且将会)变小。 total 采用的新值将在 [0; total] 范围内。 i 取的新值将在 [0; arr.length - 1].

范围内

因此字典可能的不同键数最多为(total+1) * arr.length

使用已经在字典中的一对 totali 的值调用 dp 不会导致进一步的递归调用。因此,导致进一步递归调用的 dp 的调用次数最多为 (total+1) * arr.length.

由于每次调用 dp 最多导致 2 次进一步的递归调用,因此对 dp 的调用总数最多为 2 * (total+1) * arr.length。即 O(total * arr.length)。我假设这就是你所说的 O(total * n).