矩阵中的最大得分(Lc3148)——动态规划
给你一个由 正整数 组成、大小为 m x n
的矩阵 grid
。你可以从矩阵中的任一单元格移动到另一个位于正下方或正右侧的任意单元格(不必相邻)。从值为 c1
的单元格移动到值为 c2
的单元格的得分为 c2 - c1
。
你可以从 任一 单元格开始,并且必须至少移动一次。
返回你能得到的 最大 总得分。
示例 1:
输入:grid = [[9,5,7,3],[8,9,6,1],[6,7,14,3],[2,5,3,1]]
输出:9
解释:从单元格 (0, 1)
开始,并执行以下移动:
- 从单元格 (0, 1)
移动到 (2, 1)
,得分为 7 - 5 = 2
。
- 从单元格 (2, 1)
移动到 (2, 2)
,得分为 14 - 7 = 7
。
总得分为 2 + 7 = 9
。
示例 2:
输入:grid = [[4,3,2],[3,2,1]]
输出:-1
解释:从单元格 (0, 0)
开始,执行一次移动:从 (0, 0)
到 (0, 1)
。得分为 3 - 4 = -1
。
提示:
m == grid.length
n == grid[i].length
2 <= m, n <= 1000
4 <= m * n <= 105
1 <= grid[i][j] <= 105
问题简要描述:返回最大总得分
细节阐述:
- f[i][j] 表示以 (i,j) 为终点的路径的最小值
Java
class Solution {public int maxScore(List<List<Integer>> grid) {int m = grid.size(), n = grid.get(0).size();int[][] f = new int[m + 1][n + 1];int inf = 1 << 30, ans = -inf;for (int i = 0; i < m; i++) {for (int j = 0; j < n; j++) {int min = inf;if (i > 0) {min = Math.min(min, f[i - 1][j]);}if (j > 0) {min = Math.min(min, f[i][j - 1]);}ans = Math.max(ans, grid.get(i).get(j) - min);f[i][j] = Math.min(grid.get(i).get(j), min);}}return ans;}
}
Python3
class Solution:def maxScore(self, grid: List[List[int]]) -> int:f = [[0] * len(grid[0]) for _ in range(len(grid))]ans = -inffor i, row in enumerate(grid):for j, x in enumerate(row):mi = infif i:mi = min(mi, f[i - 1][j])if j:mi = min(mi, f[i][j - 1])ans = max(ans, grid[i][j] - mi)f[i][j] = min(grid[i][j], mi)return ans
TypeScript
function maxScore(grid: number[][]): number {const [m, n] = [grid.length, grid[0].length];const f = Array.from({length: m}, () => Array.from({length: n}, () => 0));let ans = -Infinity;for (let i = 0; i < m; i++) {for (let j = 0; j < n; j++) {let min = Infinity;if (i > 0) {min = Math.min(min, f[i - 1][j]);}if (j > 0) {min = Math.min(min, f[i][j - 1]);}ans = Math.max(ans, grid[i][j] - min);f[i][j] = Math.min(grid[i][j], min);}}return ans;
};
C++
class Solution {
public:int maxScore(vector<vector<int>>& grid) {int m = grid.size(), n = grid[0].size();int f[m][n];int inf = 1 << 30, ans = -inf;for (int i = 0;i < m;i++) {for (int j = 0;j < n;j++) {int mi = inf;if (i > 0) {mi = min(mi, f[i - 1][j]);}if (j > 0) {mi = min(mi, f[i][j - 1]);}ans = max(ans, grid[i][j] - mi);f[i][j] = min(grid[i][j], mi);}}return ans; }
};
Go
func maxScore(grid [][]int) int {m, n := len(grid), len(grid[0])f := make([][]int, m)for i := range f {f[i] = make([]int, n)}const inf int = 1 << 30ans := -inffor i, row := range grid {for j, x := range row {mi := infif i > 0 {mi = min(mi, f[i-1][j])}if j > 0 {mi = min(mi, f[i][j-1])}ans = max(ans, x-mi)f[i][j] = min(x, mi)}}return ans
}
相关文章:

矩阵中的最大得分(Lc3148)——动态规划
给你一个由 正整数 组成、大小为 m x n 的矩阵 grid。你可以从矩阵中的任一单元格移动到另一个位于正下方或正右侧的任意单元格(不必相邻)。从值为 c1 的单元格移动到值为 c2 的单元格的得分为 c2 - c1 。 你可以从 任一 单元格开始,并且必须…...

C++ 设计模式(4. 建造者模式)
建造者模式(也被成为生成器模式),是一种创建型设计模式,软件开发过程中有的时候需要创建很复杂的对象,而建造者模式的主要思想是将对象的构建过程分为多个步骤,并为每个步骤定义一个抽象的接口。具体的构建…...
Arbitrum 和 Optimism Layer 2 扩展方案对比
Arbitrum 和 Optimism 对比分析 Arbitrum 和 Optimism 是两个以太坊 Layer 2 扩展方案,它们都使用了 Optimistic Rollup 技术来提升以太坊的可扩展性并降低交易成本。虽然它们有着相似的目标,但在架构设计、性能表现和费用结构上各有特点。 一、架构与…...

热门的蓝牙耳机中,哪种类型更受欢迎?四款热度高的开放式耳机
在如今的耳机市场中,开放式耳机异军突起,成为了众多消费者的新宠。如果你还在为传统入耳式耳机带来的不适而烦恼,那么开放式耳机绝对值得你一试。它不仅能让你在享受音乐的同时,依然可以清晰感知周围环境,保障你的安全…...
基于web的亚热带常见自然林病虫害识别系统——总结与展望
文章目录 一、前言二、总结三、展望参考文献致谢一、前言 这个系列也迎来了结尾,最后说一些碎碎念… 二、总结 本文首先简要介绍了卷积神经网络的基本原理,以及在亚热带常见自然林植物识别领域的研究应用现状。 其重点研究了卷积神经网络在亚热带常见自然林植物叶片病害识…...
其他自动重试的注解
除了 Retryable 注解之外,Spring 提供了其他注解用于自动重试方法,主要包括以下几个注解: 1. Recover Recover 注解用于定义重试次数耗尽后执行的恢复方法。当 Retryable 注解的重试次数达到上限时,Recover 方法会被调用。这通常…...

宠物空气净化器哪款能吸毛?希喂、米家宠物空气净化器测评分享
养猫最令人困扰的,就是掉毛与难以彻底消除的异味,这两个问题就成了养猫生活中的一大挑战。每当换季或是猫咪自我梳理时,家中便被一层细腻的绒毛覆盖,从地板到沙发,从床单到衣物,甚至是空气中都漂浮着细小的…...
讲清前端开发(入门)
前端开发:创建用户在网页或应用程序中直接与之交互的部分。 简单来说,就是负责打造用户在使用网站、网页应用或者移动应用时直接看到和与之交互的部分。打个比方,前端开发就像是给房子做装修。房子的框架结构已经有了,但是需要有…...
深入理解MySQL索引:原理、数据结构与优化策略
深入理解MySQL索引:原理、数据结构与优化策略 MySQL 是当今最流行的开源关系型数据库管理系统之一,其强大的性能与灵活的可扩展性使得它广泛应用于各种规模的应用程序中。在数据库的日常操作中,索引起着至关重要的作用,能够极大地…...

mysql数据库基础使用
1、登录mysql ① 本地登录 mysql -u 用户名 -p ②远程登入 mysql -h ip主机地址 -P 端口号 -u 用户名 -p 回车输入密码即可. 2、关于用户操作 ①创建用户 % 代表所有ip都可以访问,可指定主机ip create user 用户名% identified by 密码; ②修改密码 alte…...

GATK AlleleList接口介绍
在 GATK(Genome Analysis Toolkit)中,AlleleList 接口是一个用来表示等位基因(alleles)列表的接口。Allele 是遗传学中用于表示某一特定基因座的不同形式的一个基本单位。AlleleList 接口定义了一些操作,使得处理和访问一组等位基因更加方便。 AlleleList 的实现类和继承…...
直播App遭受抓包后的DDoS与CC攻击防御策略
随着直播应用的普及,越来越多的用户开始依赖这些平台进行娱乐和社交活动。然而,这也使得直播平台成为网络攻击的目标之一。其中,DDoS(分布式拒绝服务)攻击和CC(Challenge Collapsar,即HTTP慢速攻…...
【xilinx】 AXI Quad SPI IP - 如果 s_axi_wstrb 不等于 0xf,则寄存器可能无法正确更新
PG153 (v3.2) 规定如下: “AXI4-Lite 写访问寄存器由 32 位 AXI 写数据 (* _wdata ) 信号更新,并且不受 AXI 写数据选通 (* _wstrb ) 信号的影响。” "The AXI4-Lite write access register is updated by the 32-bit AXI Write Data (* _wdata ) s…...

【EPLAN】P8 2.9 使用不了ePLUSE
【更多软件使用问题请点击亿道电子官方网站】 1、 文档目标 解决 EPLAN P8 2.9 使用不了ePLUSE问题 2、 问题场景 客户反应 EPLAN P8 2.9 版本打开后使用不了 ePLUSE 功能,如图 1 所示 EPLAN ePLUSE 界面为空白状态,无法使用。 图 1 3、软硬件环境 …...

页面设计任务 个人简介页面
目录 任务要求 任务讲解 源码: 详细讲解 html部分 CSS部分 任务要求 页面结构: 创建一个基本的 HTML 页面,页面标题为“我的个人简介”。页面内容分为以下四个部分: 顶部导航栏: 包含至少三个导航链接,例如:“主页”、“关于…...

机械学习—零基础学习日志(如何理解概率论3)
随机变量的函数分布 一维随机变量分布,可以看到下图,X为不同情况的概率。而x如果是大于等于X,那么当x在40以内时,没有概率,为0。 当x变大,在40-80之间,那么x大于X的概率为,0.7&…...

YOLOv8添加SE注意力机制有效提升检测精度(已跑通)
SE注意力机制概念 SSqueeze-and-Excitation (SE) 注意力机制是一种专注于增强网络模型对不同特征通道的重要性理解的机制。它通过对通道维度上的特征进行动态调整,增强了网络对重要特征的敏感性。 源码 import numpy as np import torch from torch import nn fro…...

【正点原子K210连载】第三十二章 音频FFT实验 摘自【正点原子】DNK210使用指南-CanMV版指南
第三十二章 音频FFT实验 本章将介绍CanMV下FFT的应用,通过将时域采集到的音频数据通过FFT为频域。通过本章的学习,读者将学习到CanMV下控制FFT加速器进行FFT的使用。 本章分为如下几个小节: 32.1 maix.FFT模块介绍 32.2 硬件设计 32.3 程序设…...
Android Studio修改默认.m2与Gradle user home缓存位置
Android Studio修改默认.m2与Gradle user home缓存位置 1、修改Gradle user home的方法: android studio配置默认.gradle路径_android studio gradle在哪-CSDN博客文章浏览阅读2k次。当android studio新建一个项目时候,默认的.gradle路径均认为是在c盘的…...

BFS解决单源最短路问题
目录 迷宫中离入口最近的出口 最小基因变化 单词接龙 为高尔夫比赛砍树 迷宫中离入口最近的出口 题目 思路 使用宽度优先遍历解决这道题,需要一个二维数组标记是否被遍历过,也需要一个队列辅助完成宽度优先遍历,类似于水波纹一样&#x…...

Chapter03-Authentication vulnerabilities
文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...

3.3.1_1 检错编码(奇偶校验码)
从这节课开始,我们会探讨数据链路层的差错控制功能,差错控制功能的主要目标是要发现并且解决一个帧内部的位错误,我们需要使用特殊的编码技术去发现帧内部的位错误,当我们发现位错误之后,通常来说有两种解决方案。第一…...

Cloudflare 从 Nginx 到 Pingora:性能、效率与安全的全面升级
在互联网的快速发展中,高性能、高效率和高安全性的网络服务成为了各大互联网基础设施提供商的核心追求。Cloudflare 作为全球领先的互联网安全和基础设施公司,近期做出了一个重大技术决策:弃用长期使用的 Nginx,转而采用其内部开发…...
土地利用/土地覆盖遥感解译与基于CLUE模型未来变化情景预测;从基础到高级,涵盖ArcGIS数据处理、ENVI遥感解译与CLUE模型情景模拟等
🔍 土地利用/土地覆盖数据是生态、环境和气象等诸多领域模型的关键输入参数。通过遥感影像解译技术,可以精准获取历史或当前任何一个区域的土地利用/土地覆盖情况。这些数据不仅能够用于评估区域生态环境的变化趋势,还能有效评价重大生态工程…...
MySQL中【正则表达式】用法
MySQL 中正则表达式通过 REGEXP 或 RLIKE 操作符实现(两者等价),用于在 WHERE 子句中进行复杂的字符串模式匹配。以下是核心用法和示例: 一、基础语法 SELECT column_name FROM table_name WHERE column_name REGEXP pattern; …...

FFmpeg avformat_open_input函数分析
函数内部的总体流程如下: avformat_open_input 精简后的代码如下: int avformat_open_input(AVFormatContext **ps, const char *filename,ff_const59 AVInputFormat *fmt, AVDictionary **options) {AVFormatContext *s *ps;int i, ret 0;AVDictio…...

uni-app学习笔记三十五--扩展组件的安装和使用
由于内置组件不能满足日常开发需要,uniapp官方也提供了众多的扩展组件供我们使用。由于不是内置组件,需要安装才能使用。 一、安装扩展插件 安装方法: 1.访问uniapp官方文档组件部分:组件使用的入门教程 | uni-app官网 点击左侧…...
SpringCloud优势
目录 完善的微服务支持 高可用性和容错性 灵活的配置管理 强大的服务网关 分布式追踪能力 丰富的社区生态 易于与其他技术栈集成 完善的微服务支持 Spring Cloud 提供了一整套工具和组件来支持微服务架构的开发,包括服务注册与发现、负载均衡、断路器、配置管理等功能…...

无头浏览器技术:Python爬虫如何精准模拟搜索点击
1. 无头浏览器技术概述 1.1 什么是无头浏览器? 无头浏览器是一种没有图形用户界面(GUI)的浏览器,它通过程序控制浏览器内核(如Chromium、Firefox)执行页面加载、JavaScript渲染、表单提交等操作。由于不渲…...
组合模式:构建树形结构的艺术
引言:处理复杂对象结构的挑战 在软件开发中,我们常遇到需要处理部分-整体层次结构的场景: 文件系统中的文件与文件夹GUI中的容器与组件组织结构中的部门与员工菜单系统中的子菜单与菜单项组合模式正是为解决这类问题而生的设计模式。它允许我们将对象组合成树形结构来表示&…...