您好,我一直在研究https://leetcode.com/problems/2-keys-keyboard/submissions/并遇到了这个动态编程问题。
您从空白页上的“A”开始,n
完成后您会得到一个数字,您应该n
在页面上有时间“A”。问题是您只允许复制 2 次操作(并且您只能复制页面上当前 A 的总数)并粘贴 -> 找到在n
页面上获得“A”的最小操作数。
我编写了以下算法来解决这个问题,但我很难分析它的时间复杂度。
这是代码:
def minSteps(self, n: int) -> int:
DP = [0] + [0] + [i for i in range(2, n+1)]
for d in range(2, n+1):
for i in range(d*2, n+1, d):
DP[i] = min(DP[i], DP[d] + i//d )
return DP[n]
所以我的直觉说这个算法介于两者之间O(n^2)
,O(nlogn)
因为在第二个循环中我们比“更快”,O(n)
但是由于每次迭代之间步长d
不会加倍,所以O(n)
对于第二个循环来说仍然有点......
我不确定如何分析那个,欢迎任何帮助。