1937
想法一
- 当前row只看row-1,所以使用prev 和 curr两个list动态交换更新值
- 根据要求遍历prev的每个值更新最大值
错误点: 2, 遍历每个值导致最大time complexity能到
O(n^2)
想法二
根据想法一进行优化,取 col 左右最大能取的值,因为point[i][j]
有自己的分数,再往col +- point[i][j]
外走分数会越来越小所以就在这个区间找
确实优化了时间,但错在了最后一个test case. 值在开头结尾来回换
错误点: 避免减分虽然优化了时间但违背了初衷,要使分数最大,减点分是可以接受的。例如[100, 0, ..., 0], [0,...,0,100]
来回交换,刚开始可能保持col相加是合算的,但随着row越来越大,中间的值也会越来越大。例如在i = 1
时,值是[100, 99, 98, ... , 0]
, 在i = 2
时就变成了 [100, 99, .. 0, 0, ... 99, 100]
, 在i=3
时则是[200,199,198, ...,0 , 0, ..., 99, 100]
在某个点上会eventually相交从而得到更大的值。例如当abs(j - i)
加上中间值大于第一个值的时候
正确做法
优化时间,我们直接将每个j左右最大值算出来,这样就不用再去遍历