47_剑指offer_java_礼物的最大价值

Java中求最大值的4种方法实例代码 主要给大家介绍了关于Java中求最大值的4种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧 立即下载

目录

题目描述

测试用例

题目考点

解题思路

参考解题


题目描述

在一个 m*n 的棋盘的每一个格都放有一个礼物,每个礼物都有一定价值(价值大于0)。从左上角开始拿礼物,每次向右或向下移动一格,直到到达棋盘的右下角。给定一个棋盘及上面的礼物,请计算你最多能拿到多少价值的礼物。

例如,在下面的棋盘中,如果沿着(1、12、5、7、7、16、5)的路线,那么我们能拿到最大价值为53的礼物。

1    10   3    8
12   2    9    6
5    7    4    11
3    7    16   5

 

测试用例

  • 功能测试(多行多列的矩阵;一行或者一列的矩阵;只有一个数字的矩阵)
  • 特殊输入测试(指向矩阵数组的指针为空指针)

 

题目考点

  • 考察应聘者用动态规划分析问题的能力。
  • 考察应聘者对递归及时间效率的理解。需要我们利用动态规划来减少重复计算。

 

解题思路

首先我们要找出递归式:

f(i,j) = max(f(i-1,j),f(i,j-1)) + gift[i,j]

所以我们可能会马上用递归做出来(见自己解题),但是这种方法会有大量的重复计算,导致递归的代码不是最优的,所以我们考虑用动态规划(循环)来做。

我们需要一个二维数组,数组中坐标为(i,j)的元素表示到达坐标(i,j)的格子时能拿到的礼物价值总和的最大值。

代码见参考解题。

 

参考解题

package Sword;
/**
 *  动态规划
 * @author tyler
 *
 */
public class getMaxValueSolution {
	public int getMost(int[][] board) {
		// 异常
		if (board == null || board.length == 0 || board[0].length == 0) {
			return 0;
		}
		
		int rows = board.length;
		int columns = board[0].length;
		
		// 二维辅助数组,存储f(i,j)
		int[][] maxValue = new int[rows][columns];
		
		for (int i = 0; i < rows; ++i) {
			for (int j = 0; j < columns; ++j) {
				// 当前值
				int curValue = board[i][j];
				if (i == 0 &&  j == 0) {
					// 存入当前值
					maxValue[i][j] = curValue;
				}else if (i == 0) {
					// 第一行,最大值只能从左边往右走得到
					maxValue[i][j] = maxValue[i][j-1] + curValue;
				}else if (j == 0) {
					// 第一列,最大值只能从上面往下走得到
					maxValue[i][j] = maxValue[i-1][j] + curValue;
				}else {
					// 挑一个最大的上一步
					maxValue[i][j] = Math.max(maxValue[i][j-1], maxValue[i-1][j]) + curValue;
				}
			}
		}
		
		return maxValue[rows - 1][columns - 1];
	}
}

 

优化代码

优化储存数组,i-2行及以上可以不用保存,降低空间占用率。

 

Cadence17.2 > OrCAD Capture CIS > 设计规则检查(Design Rule Check)DRC学习记录详解 选中设计完成的DSN文件,选择Tool->Design Rule Check,弹出下面对话框,详解如下。 一、Design Rule Check对话框选项详解 Design Rules Options tab Set the scope, mode and type of design rule (electrical and / or physical) test options for the design rules check. 为 阅读详情

相关推荐

Cortex-M内核DWT周期计数器:从原理到STM32实战时间测量与性能分析

在嵌入式开发中,代码执行耗时测量是性能优化的基础。除了依赖外设定时器或SysTick,ARM Cortex-M3/M4/M7内核自带的DWT(Data Watchpoint and Tracker)调试组件提供了一种极低侵入性的硬件计时方案。其内部的32位周期计数器CYCCNT跟随内核时钟递增,无需占用额外引脚或定时器资源,即可实现纳秒级分辨率的函数耗时测量、中断响应分析及延时实现。从DWT寄存器配置、周期差值计算到基于SystemCoreClock的微秒换算,开发者可以快速搭建一套轻量级性能分析工具。本文

weixin_34216614的博客 187

【Java】每日一题,礼物的最大价值

在一个 m*n 的棋盘的每一格都放有一个礼物,每个礼物都有一定的价值(价值大于 0)。你可以从棋盘的左上角开始拿格子里的礼物,并每次向右或者向下移动一格、直到到达棋盘的右下角。给定一个棋盘及其上面的礼物的价值,请计算你最多能拿到多少价值的礼物?

weixin_53662229的博客 324

别再只盯着轨迹线了!FLUENT DPM后处理实战:从粒子采样到直方图报告的完整流程

本文详细介绍了FLUENT DPM后处理的完整流程,从粒子采样到直方图报告的实战技巧。通过设置采样面、分析.dpm文件数据以及创建加权直方图,帮助工程师获取粒子速度、粒径分布等定量信息,提升多相流模拟的深度分析能力。特别适合需要超越轨迹线分析的CFD工程师。

weixin_28730353的博客 278

Java详解剑指offer面试题47--礼物的最大价值

Java详解剑指offer面试题47–礼物的最大价值 在一个mxn的棋盘的每一格斗放油一个礼物,每个礼物都有一定的价值(大于0)从棋盘的左上角开始,每次可以往右边或者下边移动一格,知道到达棋盘的右下角。给定一个棋盘和上面的礼物,计算我们最多可以拿到多少价值的礼物 递归–两个方向的深度优先搜索 我第一想到的是递归,然后被书上打脸。不管,还是实现一下吧。 package Chap5; public class MaxGiftVal { /** * 方法一:递归,两个方向的深度优先搜索,

快乐李同学的博客 651

Modelsim安装教程以及管理员身份运行patch_dll.bat时找不到文件mgls.dll的解决

Modesim安装教程 Modesim版本有很多,但是安装方式大都相同,我们以modesim.10.5为例,电脑使用的是win10 64位,讲一下安装过程中的步骤以及出现问题的解决方法 一 安装 1.首先解压安装包,在解压的安装包内选择应用程序,右键选择管理员运行。 2.稍等一会,有的电脑会弹出是否允许modesim进行更改,选择 是 即可,然后出现下面的界面,点击下一步。 3.弹出此界面选择安装路径,选择安装路径,我是在D盘新建的文件夹,直接把文件夹中的路径复制在框内。文件夹名称切记不要带中文 4.

weixin_48564372的博客 1万+

数字签名(Digital Signature)技术详解:从原理到实践

数字签名技术是数字世界身份认证和数据完整性的核心保障。它结合非对称加密和哈希函数两大密码学技术,实现双重安全防护:哈希函数确保数据完整性,非对称加密确保签名不可伪造。签名过程包括发送方用私钥加密文件哈希值生成签名,接收方用公钥验证签名并比对哈希值。RSA、DSA、ECDSA等主流算法各有特点,适用于不同场景。公钥基础设施(PKI)通过数字证书和CA认证建立信任链,确保公钥真实性。这套技术体系支撑着电子合同、软件认证、在线交易等各类数字安全应用,是现代网络信任体系的基石。

guigenyi的专栏 1368

剑指offer 面试题47:礼物的最大值(java)

题目 在一个 m*n 的棋盘的每一格都放有一个礼物,每个礼物都有一定的价值(价值大于 0)。你可以从棋盘的左上角开始拿格子里的礼物,并每次向右或者向下移动一格、直到到达棋盘的右下角。给定一个棋盘及其上面的礼物的价值,请计算你最多能拿到多少价值的礼物? 示例 1: 输入: [ [1,3,1], [1,5,1], [4,2,1] ] 输出: 12 解释: 路径 1→3→5→2→1 可以拿到最多价值的礼物 思路 典型的动态规划 定义dp数组 dp[i][j]代表当前走到格子的(i - 1, j - 1)位

Peanut的博客 559

半导体AMHS天车振动控制:从0.5G到超低振动的技术演进与工程实战

在先进晶圆厂中,自动化物料搬运系统(AMHS)的天车如同空中出租车,承担着晶圆盒(FOUP)在洁净室各工艺区间的转运任务。然而,当天车加减速、过弯或抓取时产生的机械振动通过轨道梁和建筑结构传递至光刻机等敏感设备,便可能直接威胁套刻精度与良率。传统被动减振方案依靠橡胶垫和弹簧,在0.5G指标时代曾行之有效,但在EUV光刻和先进制程面前已力不从心。主动振动控制技术通过传感器、控制器与作动器构成的闭环系统,在轨道吊点和机械手端实时输出反向力抵消振动,配合磁悬浮走行、轻量化结构及调度系统的路径优化,将振动从0.5G

weixin_29188043的博客 345

【LeetCode】剑指 Offer 47. 礼物的最大价值 p233 -- Java Version

剑指 Offer 47. 礼物的最大价值。在一个 m*n 的棋盘的每一格都放有一个礼物,每个礼物都有一定的价值(价值大于 0)。你可以从棋盘的左上角开始拿格子里的礼物,并每次向右或者向下移动一格、直到到达棋盘的右下角。给定一个棋盘及其上面的礼物的价值,请计算你最多能拿到多少价值的礼物?

汤姆lazy的优快云博客 603

OpenClaw:深度学习驱动的智能编程工具实战解析

智能编程工具通过深度学习技术革新传统开发流程,其核心在于代码语义理解与实时协作能力。这类工具采用AI代码补全、错误预测等技术,显著降低开发者认知负荷,尤其适用于复杂业务逻辑开发和遗留系统维护场景。以OpenClaw为例,其智能填充和上下文感知功能可提升40%编码效率,减少65%调试时间。关键技术实现包含自然语言处理、代码静态分析等,在金融科技、电商系统等领域具有广泛应用前景。热词提示:代码理解引擎、智能工作流整合展现了当前AI辅助开发的最新趋势。

chubaisheng8627的博客 320

嵌入式电机控制实战:手把手教你实现I/F强拖启动(附仿真代码)

本文详细介绍了嵌入式电机控制中的I/F强拖启动技术,通过参数配置、代码实现和仿真验证的完整流程,帮助开发者掌握永磁同步电机(PMSM)的高效启动方法。文章包含硬件平台搭建、参数整定黄金法则及MATLAB/Simulink仿真验证,适合工业自动化和智能设备领域的工程师参考。

rust6ferris的博客 911

剑指Offer-题47(Java版):礼物的最大价值

参考自:《剑指Offer——名企面试官精讲典型编程题》 题目:礼物的最大价值 在一个m×n的棋盘的每一格都放有一个礼物,每个礼物都有一定的价值(价值大于0)。你可以从棋盘的左上角开始拿格子里的礼物,并每次向右或者向下移动一格直到到达棋盘的右下角。给定一个棋盘及其上面的礼物,请计算你最多能拿到多少价值的礼物? 主要思路:使用动态规划,f(i,j)表示到达坐标[i,j]时能拿到的最大礼物总和。则...

浊酒入清梦的博客 1533

[HBM] RAM Cell Self Repair | 内存单元自我修复

对抗错误的大都是冗余,内存颗粒在设计的时候也考虑增加冗余。具体的说:添加冗余或备用的存储单元行和列,及时将测试中的故障进行修复和替换,存储器修复包括行修复,列修复或两者的组合。

串起点滴 785

剑指offer面试题47(java版):礼物的最大价值

welcome to my blog 剑指offer面试题47(java版):礼物的最大价值 题目描述 在一个 m*n 的棋盘的每一格都放有一个礼物,每个礼物都有一定的价值(价值大于 0)。 你可以从棋盘的左上角开始拿格子里的礼物,并每次向右或者向下移动一格、直到到达棋盘的右下角。 给定一个棋盘及其上面的礼物的价值,请计算你最多能拿到多少价值的礼物?   示例 1: 输入: [ ...

littlehaes的博客 1125

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Java描述 LeetCode,剑指 Offer 47. 礼物的最大价值

一道比较常见的DP题,用滚动数组解决是最好的。

人在江湖 421

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

[算法练习及思路-leetcode剑指offer(Java解法)]No47.礼物的最大价值

题号:剑指 Offer 47 题目名:礼物的最大价值 原题URL:https://leetcode-cn.com/problems/li-wu-de-zui-da-jie-zhi-lcof/ 题目描述 在一个 m*n 的棋盘的每一格都放有一个礼物,每个礼物都有一定的价值(价值大于 0)。你可以从棋盘的左上角开始拿格子里的礼物,并每次向右或者向下移动一格、直到到达棋盘的右下角。给定一个棋盘及其上面的礼物的价值,请计算你最多能拿到多少价值的礼物? 示例 示例 1: 输入: [ [1,3,1], [1,

叶落雨飘的博客 209

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

[剑指 offer]47 礼物的最大价值 Java实现

题目 在一个 m*n 的棋盘的每一格都放有一个礼物,每个礼物都有一定的价值(价值大于 0)。你可以从棋盘的左上角开始拿格子里的礼物,并每次向右或者向下移动一格、直到到达棋盘的右下角。给定一个棋盘及其上面的礼物的价值,请计算你最多能拿到多少价值的礼物? 示例 1: 输入: [ [1,3,1], [1,5,1], [4,2,1] ] 输出: 12 解释: 路径 1→3→5→2→1 可以拿到最多价值的礼物、 代码 一月一度的幺蛾子 输出0!!!!为什么到了递交这就是输出12 我淦!编译器怎么做到输出12的(肯.

BedivereAlter的博客 252

剑指 Offer 47. 礼物的最大价值Java题解

1.思路 设f(i,j)为从棋盘左上角走至单元格(i,j)的礼物最大累计价值,得到以下递推关系: f(i,j) 等于f(i,j−1) 和f(i−1,j) 中的较大值加上当前单元格礼物价值grid[i,j] 2.代码 class Solution { public int maxValue(int[][] grid) { int m=grid.length; int n=grid[0].length; for(int i=1;i<m;i++){

乾坤未定,你我皆是黑马 285

剑指Offer47:礼物的最大价值(Java)

题目描述: 解法1:     这是一道经典的动态规划题目。这道题没有要求不能在原来的数组上修改,所以我们可以定义一个新数组或者在原来的数组上修改。但是一般的话,我们都是创建一个和原来数组大小一样的新数组来存放结果。     首先,我们定义一个新数组。然后使用动态规划的思想,除去第一列和第一行,其他位置都有两种方法可以到达。一种是纵向,一种是横向,我们只要取其中价值最大的一种即可。对于第一列的元素,相互之间只能是横向到达。而第一行的元素,相互之间只能是纵向到达。最终,我们返回终点的元素就是这个二维数组的最大

程序猿小龙的博客 353

JAVA礼物题_【Java】 剑指offer(47) 礼物的最大价值

本文参考自《剑指offer》一书,代码采用Java语言。题目在一个m×n的棋盘的每一格都放有一个礼物,每个礼物都有一定的价值(价值大于0)。你可以从棋盘的左上角开始拿格子里的礼物,并每次向左或者向下移动一格直到到达棋盘的右下角。给定一个棋盘及其上面的礼物,请计算你最多能拿到多少价值的礼物?思路动态规划:定义f(i,j)为到达(i,j)位置格子时能拿到的礼物总和的最大值,则有:f(i,j)=max{...

weixin_28916817的博客 258

剑指 Offer 47. 礼物的最大价值——Java代码及思路解析

剑指 Offer 47. 礼物的最大价值 典型的动态规划题目,思路理清后不难,一起来看看吧! 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/li-wu-de-zui-da-jie-zhi-lcof 文章目录剑指 Offer 47. 礼物的最大价值一、题目描述二、思路及代码总结 一、题目描述 描述:在一个 m*n 的棋盘的每一格都放有一个礼物,每个礼物都有一定的价值(价值大于 0)。你可以从棋盘的左上角开始拿格子里的礼物,并每次向右或者向下移动一

weixin_48610702的博客 339

剑指offer(Java实现)47 - 礼物的最大价值

礼物的最大价值-47 在一个m×n的棋盘的每一格都放有一个礼物,每个礼物都有一定的价值(价值大于0)。 你可以从棋盘的左上角开始拿格子里的礼物,并每次向右或者向下移动一格直到到达棋盘的右下角。 给定一个棋盘及其上面的礼物,请计算你最多能拿到多少价值的礼物? 注意: m, n > 0 样例: 输入: [ [2,3,1], [1,7,1], [4,6,1] ] 输出:19 解释:...

rookie_0821的博客 110

LeetCode——剑指 Offer 47 礼物的最大价值(JAVA)

在一个 m*n的棋盘的每一格都放有一个礼物,每个礼物都有一定的价值(价值大于 0)。你可以从棋盘的左上角开始拿格子里的礼物,并每次向右或者向下移动一格、直到到达棋盘的右下角。给定一个棋盘及其上面的礼物的价值,请计算你最多能拿到多少价值的礼物? 示例 1: 输入: [ [1,3,1], [1,5,1], [4,2,1] ] 输出: 12 解释: 路径 1→3→5→2→1 可以拿到最多价值的礼物 提示: 0 < grid.length<= 200 0 < grid[0].le

一只奋斗中的本科生 188

剑指Offer系列(java版,详细解析)47.礼物的最大价值

题目描述 在一个 m*n 的棋盘的每一格都放有一个礼物,每个礼物都有一定的价值(价值大于 0)。你可以从棋盘的左上角开始拿格子里的礼物,并每次向右或者向下移动一格、直到到达棋盘的右下角。给定一个棋盘及其上面的礼物的价值,请计算你最多能拿到多少价值的礼物? 示例 1: 输入: [ [1,3,1], [1,5,1], [4,2,1] ] 输出: 12 解释: 路径 1→3→5→2→1 可以拿到最多价值的礼物 提示: 0 < grid.length <= 200 0 < gri

Viper的程序员修炼手册 663

剑指offer第二版面试题47:礼物的最大价值(java)

题目描述: 在一个m×n的棋盘的每一格都放有一个礼物,每个礼物都有一定的价值(价值大于0)。你可以从棋盘的左上角开始拿格子里的礼物,并每次向右或者向下移动一格直到到达棋盘的右下角。给定一个棋盘及其上面的礼物,请计算你最多能拿到多少价值的礼物? 分析思路: 利用循环的动态规划实现,使用辅助二维数组 •定义f(i,j)表示到达坐标为(i,j)的格子时能拿到的礼物总和的最大值; •有两种路...

许文杰的博客 1618

【剑指offer】面试题47:礼物的最大价值(Java)

在一个 m*n 的棋盘的每一格都放有一个礼物,每个礼物都有一定的价值(价值大于 0)。你可以从棋盘的左上角开始拿格子里的礼物,并每次向右或者向下移动一格、直到到达棋盘的右下角。给定一个棋盘及其上面的礼物的价值,请计算你最多能拿到多少价值的礼物? 示例 1: 输入: [ [1,3,1], [1,5,1], [4,2,1] ] 输出: 12 解释: 路径 1→3→5→2→1 可...

hx1043116928的博客 272
上一篇: 46_剑指offer_java_把数字翻译成字符串
下一篇: 48_剑指offer_java_最长不含重复字符的子字符串
Longtermevolution
博客等级 码龄9年 113粉丝 249原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值