标签:Day09 21 nums int Offer grid public 礼物
Day09_剑指Offer
package com.sorrymaker.day3309;
import org.junit.Test;
/**
* 连续子数组的最大和
* @Author nextGame
* @Date 2021/8/21 20:52
* @Version 1.0
*/
public class MaxSubArray {
@Test
public void test(){
int[] nums ={-2,1,-3,4,-1,2,1,-5,4};
System.out.println(maxSubArray(nums));
}
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;
}
}
package com.sorrymaker.day3309;
/**在一个 m*n 的棋盘的每一格都放有一个礼物,每个礼物都有一定的价值(价值大于 0)。
* 你可以从棋盘的左上角开始拿格子里的礼物,并每次向右或者向下移动一格、
* 直到到达棋盘的右下角。给定一个棋盘及其上面的礼物的价值,请计算你最多能拿到多少价值的礼物?
* @Author nextGame
* @Date 2021/8/21 21:29
* @Version 1.0
*/
public class MaxValue {
public int maxValue(int[][] grid) {
//定义行 、 列
int row = grid.length;
int column = grid[0].length;
//定义dp数组,比grid多一列和一行。
int[][] dp = new int[row + 1][column + 1];
//嵌套循环
for (int i = 1; i <= row; i++) {
for (int j = 1; j <= column; j++) {
//求出dp里面最大值的地方,再加上grid 原本的右下角的值 。 就是总共的价值。
dp[i][j] = Math.max(dp[i - 1][j], dp[i][j - 1]) + grid[i - 1][j - 1];
}
}
//i 和 j 是局部变量,因为i和j都是遍历到row和column结束,所以返回dp[row][column] == dp[i][j]
return dp[row][column];
}
}
标签:Day09,21,nums,int,Offer,grid,public,礼物 来源: https://www.cnblogs.com/sorrymaker/p/15174068.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。