题解 | #最小体重积#

最小体重积

https://www.nowcoder.com/practice/0980f806727e48f3b0253243416038c0

题目考察的知识点

考察动态规划

题目解答方法的文字分析

路径问题,求从左上角出发到达右下角的最小路径积。arr[i][j]表示到达(i,j)位置的最小路径积。虽然题目说的是四方向都能移动 但是想从左上角到右下角 最快或者说代价最小的还是每次选择向右或者向下移动。所以第一行只能由左侧移动过来,第一列只能由上方移动过来。而中间状态的动态转移过程应该是左侧和上方的最小值和当前位置的值进行乘积,即31行所示。最终返回右下角的值即可。

本题解析所用的编程语言

使用Java解答

完整且正确的编程代码

import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param cows int整型二维数组 
     * @return long长整型
     */
    public long minPathProduct (int[][] cows) {
        // write code here
        int m = cows.length, n = cows[0].length;
        long[][] arr = new long[m][n];
        for(int i=0; i<m; i++){
            Arrays.fill(arr[i],1);
        }
        arr[0][0] = cows[0][0];
        // 虽然题目说的是四方向都能移动 但是想从左上角到右下角 最快或者说代价最小的还是每次选择向右或者向下移动
        // 初始化第一行和第一列的数组
        for(int i=1; i<n; i++){
            arr[0][i] = cows[0][i] * arr[0][i-1];
        }
        for(int i=1; i<m; i++){
            arr[i][0] = cows[i][0] * arr[i-1][0];
        }
        // 根据转移方程填充
        for(int i=1; i<m; i++){
            for(int j=1; j<n; j++){
                arr[i][j] = Math.min(arr[i-1][j],arr[i][j-1]) * cows[i][j];
            }
        }
        return arr[m-1][n-1];
    }
}

全部评论

相关推荐

12-27 22:46
门头沟学院 Java
点赞 评论 收藏
分享
11-12 14:30
已编辑
广东科技学院 前端工程师
迷茫的小刺猬在迎接o...:前端岗位越来越少了,中小厂也更倾向全栈了,更不需要初级或者实习。可能就大厂才会有一些岗位,但是很看学历。
实习,投递多份简历没人回...
点赞 评论 收藏
分享
11-07 16:07
深圳大学 运营
前端飞升:学长,阿里不是卡双非吗,我深也能去吗
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务