剑指offer|剑指 Offer 42. 第 9 天 动态规划(中等)


剑指 Offer 42. 第 9 天 动态规划(中等)

  • 剑指 Offer 42. 连续子数组的最大和
    • 题目思路
    • 代码
      • c++代码
      • python代码
  • 剑指 Offer 47. 礼物的最大价值
    • 题目思路
    • 代码
      • c++代码
      • python代码

剑指 Offer 42. 连续子数组的最大和 题目思路 不断用一个变量进行求和,如果求和结果小于0的话则等于当前元素,否则加上当前元素,求该变量的最大值
代码 c++代码
class Solution { public: int maxSubArray(vector& nums) { int n = nums.size(); int sum=0; int ans=-1000000; for(int i=0; i

python代码
class Solution: def maxSubArray(self, nums: List[int]) -> int: n = len(nums) s = 0 ans = -1000000 for i in range(n): if s<0 : s = nums[i] else : s = s + nums[i]; ans=max(ans,s) return ans

剑指 Offer 47. 礼物的最大价值 题目思路 很明显结果是从上一个和左边那个推过来的,选取最大值
代码 c++代码
class Solution { public: int maxValue(vector>& grid) { if(!grid.size()||!grid[0].size())return 0; int a[210][210]={0}; int n = grid.size(); int m = grid[0].size(); for(int i=1; i<=n; i++){ for(int j=1; j<=m; j++){ a[i][j]=max(a[i-1][j],a[i][j-1]); a[i][j]+=grid[i-1][j-1]; } } return a[n][m]; } };

python代码
class Solution: def maxValue(self, grid: List[List[int]]) -> int: if grid==None or grid[0]==None : return 0 n =len(grid) m = len(grid[0]) a = [[0]*210]*210 for i in range(1,n+1): for j in range(1,m+1): a[i][j] = max(a[i-1][j],a[i][j-1]) a[i][j] = a[i][j] + grid[i-1][j-1] return a[n][m]

这篇文章如果对小伙伴们有帮助的话,希望点个赞支持一下~ 十分感谢~ 【剑指offer|剑指 Offer 42. 第 9 天 动态规划(中等)】剑指offer|剑指 Offer 42. 第 9 天 动态规划(中等)
文章图片

    推荐阅读