Skip to main content

1937

想法一

  1. 当前row只看row-1,所以使用prev 和 curr两个list动态交换更新值
  2. 根据要求遍历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左右最大值算出来,这样就不用再去遍历