题解60 | 矩阵的最大(最小)路径和#礼物的最大价值#
礼物的最大价值
https://www.nowcoder.com/practice/2237b401eb9347d282310fc1c3adb134
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param grid int整型vector<vector<>> * @return int整型 */ int maxValue(vector<vector<int> >& grid) { // write code here int r = grid.size(); int c = grid[0].size(); for (int i = 0; i < r; i++) { for (int j = 0; j < c; j++) { if (i == 0 && j > 0) {//最上一行 grid[i][j] += grid[i][j-1]; }else if (j == 0 && i > 0) {//最左一列 grid[i][j] += grid[i-1][j]; }else { if (i == 0 && j == 0) { continue; } int max_value = max(grid[i-1][j],grid[i][j-1]); grid[i][j] += max_value; } } } return grid[r - 1][c - 1]; //路径上所有的数字累加起来就是路径和。 } };
算法基本思想:
动态规划。从左上角开始遍历矩阵,对于每个位置,计算到达该位置的最大(最小)路径和,即为该位置的值加上上方和左方位置中较大(较小也一样:NC59矩阵的最小路径和)的值。最终返回右下角位置的最大(最小)路径和。
时间复杂度:O(mn),其中m为矩阵行数,n为矩阵列数,需要遍历整个矩阵。
空间复杂度:O(1),只使用常数个额外变量。
2024考研数据结构 文章被收录于专栏
本人考研刷算法题,立此专栏练习强化。