1289. 下降路径最小和 II - 力扣(LeetCode)
hard
-
动态规划
-
f[i][j] = f[i - 1][jmin[i - 1]] + arr[i][j] 其中 j != jmin[i - 1] f[i][j] = f[i - 1][jnext[i - 1]] + arr[i][j] 其中 j == jmin[i - 1] f[0][j] = arr[0][j]
-
简化
-
f[i][j] = first_sum + arr[i][j] 其中 j != first_pos f[i][j] = second_sum + arr[i][j] 其中 j == first_pos
-
function minFallingPathSum(arr){
let n = arr.length;
let first_sum = 0, // max
first_pos = -1,
second_sum = 0; // second max
for(let i=0;i<n;++i){
let fs = Integer.MAX_VALUE, fp = -1, ss = Integer.MAX_VALUE;
for(let j=0;j<n;++j){
let cur_sum = (first_pos!=j?first_sum:second_sum)+arr[i][j];
if(cur_sum<fs){
ss = fs
fs = cur_sum;
fp = j;
}else if(cur_sum<ss){
ss = cur_sum;
}
}
first_sum = fs
first_pos = fp
second_sum = ss
}
return first_sum
}
执行结果:通过
执行用时:68 ms, 在所有 JavaScript 提交中击败了96.00%的用户
内存消耗:43.7 MB, 在所有 JavaScript 提交中击败了92.00%的用户
通过测试用例:16 / 16