1. 程式人生 > 其它 >劍指Offer-第9天 動態規劃(中等)

劍指Offer-第9天 動態規劃(中等)

第一題

題目連結:https://leetcode.cn/problems/lian-xu-zi-shu-zu-de-zui-da-he-lcof/

個人題解:記錄一個 \(maxsum\) 和一個 \(sum\),一個存答案,一個存每一次所找的最大值。

程式碼:

class Solution {
public:
    int maxSubArray(vector<int>& nums) {
        int maxn=nums[0],sum=0;
        for(int i=0;i<nums.size();i++){
            sum=max(nums[i],sum+nums[i]);
            maxn=max(maxn,sum);
        }
        return maxn;
    }
};

執行截圖:

第二題

題目連結:https://leetcode.cn/problems/li-wu-de-zui-da-jie-zhi-lcof/

個人題解:先開二維陣列初始化行和列,然後動態規劃即可

程式碼:

class Solution {
public:
    int maxValue(vector<vector<int>>& grid) {
        int m=grid.size(),n=grid[0].size();
        vector<vector<int>> f(m,vector<int>(n,0));
        f[0][0]=grid[0][0];
        
        for(int i=1;i<m;i++) f[i][0]+=f[i-1][0]+grid[i][0];
        for(int j=1;j<n;j++) f[0][j]+=f[0][j-1]+grid[0][j];

        for(int i=1;i<m;i++){
            for(int j=1;j<n;j++){
                f[i][j]=max(f[i-1][j],f[i][j-1])+grid[i][j];
            }
        }
        return f[m-1][n-1];
    }
};

執行截圖: