劍指offer計劃9(動態規劃中等版)---java

叫我阿康就好發表於2021-09-09

1.1、題目1

劍指 Offer 42. 連續子陣列的最大和

1.2、解法

得到轉移方程後,單次遍歷。

當前面的連續子陣列的和比較是否大於0,是則加起來,
若小於零,則當前的值就可當子陣列的開頭。
判斷每次的大小則取出最大值。

1.3、程式碼

class Solution {
    public int maxSubArray(int[] nums) {
        int res=nums[0];
        for(int i=1;i<nums.length;i++){
            nums[i]+=Math.max(nums[i-1],0);
            res=Math.max(nums[i],res);
        }
        return res;
    }
}

2.1、題目2

劍指 Offer 47. 禮物的最大價值

2.2、解法

這裡禮物的最大價值,分情況討論。
噹噹前座標在第一層時,它之前只可能是一直向右移動,
噹噹前座標在第一列時,它之前只可能是一直向下移動,
其他情況下,則比較該位置的上一層值與該位置左一列的值進行比較,
誰比較大,則加當前的值,成為當前位置的值。

2.3、程式碼

class Solution {
    public int maxValue(int[][] grid) {
        int m = grid.length, n = grid[0].length;
        for(int i = 0; i < m; i++) {
            for(int j = 0; j < n; j++) {
                if(i == 0 && j == 0) continue;
                if(i == 0) grid[i][j] += grid[i][j - 1] ;
                else if(j == 0) grid[i][j] += grid[i - 1][j];
                else grid[i][j] += Math.max(grid[i][j - 1], grid[i - 1][j]);
            }
        }
        return grid[m - 1][n - 1];
    }
}


相關文章