我正在阅读this,这是最后一部分的练习。
我对时间复杂性不熟悉。
第一个解决方案说,机器人将从p
到m - p
向p
向0
向m
方向移动sums = []
for left in 0..m
sums[left] = 0
for right in 0..(m-left)
sums[left] += A[k - left + right] || 0
A[k - left + right] = 0
次,向A
向另一个方向移动对我来说这是:
k
O(m + m+(m-1)+(m-2)+...+3+2+1)
| -----------------------
| |
because because the inner loop
first loop
O(m + (m*(m+1))/2)
O(m + (m*(m+1))/2)
O(m^2) ?
是输入数组,O(n*m)
是初始位置,即给定的常量。
据我所知,复杂性将是:
{{1}}
我的错误是什么?
此问题的解决方案表明复杂性为{{1}},您能解释一下原因吗?
答案 0 :(得分:0)
the goal is to calculate the maximum sum that the robot can collect in m moves.
有了这个,我理解算法将是这样的:
max=0;
for i in 1..n
for j in 1..m
sum+=A[i]
end loop;
if sum>max then
max=sum;
end if;
sum=0;
end loop;
这是一个O(n * m)问题(如果我理解正确的话)