【算法刷题】Day21

1. 【模板】前缀和

在这里插入图片描述
在这里插入图片描述
原题链接


题干:

给定一个长度为 n 的数组
有 q 次查询,每次有两个参数 l 和 r
在这里插入图片描述


算法原理:

1. 暴力解法 (模拟)

这个时间复杂度是 O(n)

2. 前缀和(快速求出数组中某一个连续区间的和)

(1)预处理出来一个前缀和数组
dp[i] 表示:[1,i] 区间内所有元素的和

在这里插入图片描述
dp[i] = dp[i-1] + arr[i]

(2)使用前缀和数组

在这里插入图片描述
要求 [l,r] 中间的和
需要 dp[r] - dp[l-1]

细节问题:
为什么下标要从 1 开始技术
这是为了处理边界
因为如果是 0,-1就会数组异常
在这里插入图片描述


代码:

public class Main {public static void main(String[] args) {Scanner in = new Scanner(System.in);int n = in.nextInt();int q = in.nextInt();int[] arr = new int[n+1];long[] dp = new long[n+1];for(int i = 1; i <= n; i++) {arr[i] = in.nextInt();}for(int i = 1; i <= n; i++) {dp[i] = dp[i-1] + arr[i];}while(q > 0) {int l = in.nextInt();int r = in.nextInt();System.out.println(dp[r] - dp[l - 1]);q--;}}
}

在这里插入图片描述


2. 【模板】二维前缀和

在这里插入图片描述
在这里插入图片描述
原题链接


题干:

有一个 n*m 的矩阵
q 次查询 输入 x1 y1 x2 y2
输出以(x1,y1) 为左上角 和 (x2,y2)为右下角的子矩阵和
在这里插入图片描述


算法原理:

1. 暴力解法(模拟)

时间复杂度超过 O(n)

2. 前缀和

(1)预处理出来一个前缀和矩阵
在这里插入图片描述
dp[i][j] 表示:从[1,1] 位置,这段区间里面所有元素的和

在这里插入图片描述
dp[i][j] = A + B + C + D = A + B + A + C + D - A
dp[i][j] = dp[i-1][j] +dp[i][j-1] +arr[i][j] - dp[i-1][j-1]

(2)使用前缀和矩阵
在这里插入图片描述
[x1,y1] ~ [x2,y2] 就是求 D 这一块的值
D = A + B + C + D - (A + B) - (A + C) + A
D = dp[x2][y2] - dp[x2][y1 - 1] - dp[x1- 1][y2] + dp[x1-
1][y2 - 1]


代码:

public class Main {public static void main(String[] args) {Scanner in = new Scanner(System.in);int n = in.nextInt();int m = in.nextInt();int[][] arr = new int[n+1][m+1];long[][] dp = new long[n+1][m+1];int q = in.nextInt();for(int i = 1; i <= n; i++) {for(int j = 1; j <= m; j++){arr[i][j] = in.nextInt();}}for(int i = 1; i <= n; i++) {for(int j = 1; j <= m; j++){dp[i][j] = dp[i-1][j] + dp[i][j-1] + arr[i][j] - dp[i-1][j-1];}}while(q > 0) {int x1 = in.nextInt();int y1 = in.nextInt();int x2 = in.nextInt();int y2 = in.nextInt();System.out.println(dp[x2][y2] - dp[x1 - 1][y2] - dp[x2][y1 - 1] + dp[x1 - 1][y1 - 1]);q--;}}
}

在这里插入图片描述


3. 地下城游戏

在这里插入图片描述
在这里插入图片描述
原题链接


题干:


算法原理:

1. 状态表示:

2. 状态转移方程

3. 初始化

4. 填表顺序

5. 返回值


代码:

class Solution {public int calculateMinimumHP(int[][] d) {int m = d.length;int n = d[0].length;int[][] dp = new int[m+1][n+1];for(int i = 0; i <= n; i++){dp[m][i] = Integer.MAX_VALUE;}for(int i = 0; i <= m; i++){dp[i][n] = Integer.MAX_VALUE;}dp[m][n-1] = dp[m-1][n] = 1;for(int i = m - 1; i >= 0; i--) {for(int j = n - 1; j >= 0; j--) {dp[i][j] = Math.min(dp[i][j+1], dp[i+1][j]) - d[i][j];dp[i][j] = Math.max(dp[i][j], 1);}}return dp[0][0];}
}

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/236967.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Docker+PXC+Haproxy搭建高可用MySQL集群

搭建 本次搭建集群环境以5节点MySQL为例 1、安装pxc镜像 拉取pxc镜像 docker pull percona/percona-xtradb-cluster 镜像名称太长&#xff0c;修改一下&#xff1a; docker tag percona/percona-xtradb-cluster pxc 删除之前的&#xff1a; docker rmi percona/percona-xtr…

DOM是什么?

1、概述 &#xff08;1&#xff09;DOM代表文档对象模型&#xff0c;是 HTML 和 XML 文档的接口&#xff08;API&#xff09; &#xff08;2&#xff09;当浏览器第一次读取&#xff08;解析&#xff09;HTML文档时&#xff0c;会创建一个基于 HTML 文档的大对象&#xff0c;…

SpringBoot操作Redis缓存

SpringBoot操作Redis缓存 Redis有很多使用场景&#xff0c;一个使用场景就是缓存数据库的数据。Redis作为一个内存数据库&#xff0c;存取数据的速度比传 统的数据库快得多。使用Redis缓存数据库数据&#xff0c;可以减轻系统对数据库的访问压力&#xff0c;及加快查询效率等…

听GPT 讲Rust源代码--src/tools(15)

File: rust/src/tools/rust-analyzer/crates/mbe/src/token_map.rs 在Rust源代码中&#xff0c;rust/src/tools/rust-analyzer/crates/mbe/src/token_map.rs文件的作用是实现了一个能够将输入的文本映射为标记的结构。具体来说&#xff0c;它定义和实现了几个结构体&#xff08…

【已解决】Mysql在更新的时候,需要更新的字段是其他表查询的值,这个时候update语句怎么写

Mysql在更新的时候,需要更新的字段是其他表查询的值&#xff0c;这个时候update语句怎么写&#xff1f; 例如&#xff1a;我想要更新A表中的floor字段。但是这个字段的是是根据条件在B表中查询后&#xff0c;得到的值。 这样需求的sql语句怎么写 &#xff1f; 要点&#xff…

Mysql5.7版本中,查询分组GROUP BY通过子查询中ORDER BY进行排序无效的问题解决办法

文章目录 一、场景&#xff1a;二、解决办法1、使用 having 来阻止合并2、足够大的limit3、子查询 一、场景&#xff1a; 问题描述&#xff1a;Mysql5.7版本中&#xff0c;查询分组GROUP BY通过子查询中ORDER BY进行排序无效的问题解决办法。 应用场景&#xff1a;一对多的关系…

数据库(三)超详细SQL语句入门 | SQL增删改查,重命名,字符操作,联合操作,聚合函数,嵌套子查询

文章目录 1 SQL表内类型2 SQL增删改语句2.1 创建表2.2 删除表2.3 表中添加属性2.4 添加新的元组信息2.5 删除表所有元组2.6 元组 3 查询语句4 重命名4.1 为什么用 5 字符操作5.1 寻找 6 生序降序7 联合操作7.1 并集Union7.2 交集 INTERSECT7.3 差集 EXCEPT7.4 对于空值补充 8 聚…

掀起全新的互联网直播风潮

随着科技的不断进步和智能手机的普及&#xff0c;无人直播作为一种全新的互联网直播方式&#xff0c;在近些年迅速崛起&#xff0c;并引起了广泛关注。本文将围绕手机无人直播展开探讨&#xff0c;探究其背后的原因以及对社会生活带来的影响。 首先&#xff0c;我们需要明确什…

[Angular] 笔记 5:ngClass

Angular 中的 ngClass 是什么&#xff1f; chatgpt 回答&#xff1a; 在Angular中&#xff0c;ngClass 是一个内置的指令&#xff0c;用于动态地添加或移除 HTML 元素的 CSS 类。它允许你根据条件设置一个或多个 CSS 类&#xff0c;可以是对象、数组或字符串。 使用方式&#…

一篇文章带你进阶CTF命令执行

以下的命令是为了方便以后做题时方便各位读者直接来这里复制使用&#xff0c;刚开始还请先看完这篇文章后才会懂得下面的命令 ?ceval($_GET[shy]);&shypassthru(cat flag.php); #逃逸过滤 ?cinclude%09$_GET[shy]?>&shyphp://filter/readconvert.base64-…

mysql:查看服务端没有睡眠的线程数量

使用命令show global status like Threads_running;可以查看服务端没有睡眠的线程数量。 例如&#xff1a;

使用React和ResizeObserver实现自适应ECharts图表

关键词 React ECharts ResizeObserver 摘要 在现代 Web 开发中&#xff0c;响应式布局和数据可视化是非常常见的需求。本文将介绍如何使用React、ResizeObserver和ECharts库来创建一个自适应的图表组件。 什么是ResizeObserver ResizeObserver是JavaScript的一个API&#x…

定时任务,停用用户。

1&#xff0c; <!-- 定时3.用户三个月无操作&#xff0c;停用用户 begin --> <bean id"autoStopSleepUserService" class"com.rjhc.application.sysmanage.service.impl.SysTaskScheduleServiceImpl" /> <bean id"jobDetail_…

玩转Spring状态机

说起Spring状态机&#xff0c;大家很容易联想到这个状态机和设计模式中状态模式的区别是啥呢&#xff1f;没错&#xff0c;Spring状态机就是状态模式的一种实现&#xff0c;在介绍Spring状态机之前&#xff0c;让我们来看看设计模式中的状态模式。 1. 状态模式 状态模式的定义如…

代码随想录 322. 零钱兑换

题目 给你一个整数数组 coins &#xff0c;表示不同面额的硬币&#xff1b;以及一个整数 amount &#xff0c;表示总金额。 计算并返回可以凑成总金额所需的 最少的硬币个数 。如果没有任何一种硬币组合能组成总金额&#xff0c;返回 -1 。 你可以认为每种硬币的数量是无限的。…

[Encryptedd@mailfence.com].faust 勒索病毒肆虐:如何恢复被加密的数据文件?

导言&#xff1a; 在网络安全的战场上&#xff0c;[backupsairmail.cc].faust [Deciphermailfence.com].faust[Encrypteddmailfence.com].faust[support2022cock.li].faust [tsai.shenmailfence.com].faust勒索病毒是一种极具破坏性的恶意软件。本文91数据恢复将深入介绍该病毒…

Docker仓库

官方docker仓库使用 网址&#xff1a;https://hub.docker.com 每个注册用户都可以上传和管理自己的镜像 用户登录 上传镜像前需要登陆&#xff0c;登陆后生成~/.docker/config.json文件保存验证信息 docker login 给本地镜像打标签 上传本地镜像前必须先给上传的镜像用do…

【krita】实时绘画 入门到精通 海报+电商+装修+人物

安装插件 首先打开comfyUI&#xff0c;再打开krita&#xff0c;出现问题提示&#xff0c; 打开 cd custom_nodes 输入命令 安装控件 git clone https://github.com/Acly/comfyui-tooling-nodes.git krita基础设置 设置模型 设置lora &#xff08;可设置lora强度 增加更多…

◢Django md5加密与中间件middleware

utils文件夹是重新建立的&#xff08;与migrations同级&#xff09;&#xff0c;该文件夹下主要存放工具&#xff0c;就像static文件夹下只存放静态文件一样 加密 在utils文件夹下建立encrypt.py文件 from django.conf import settings import hashlib def md5(data_string)…

Airtest1.2.7新增断言API介绍

1. 前言 1.2.7版本的Airtest中&#xff0c;一个很重要的功能是 新增了非常丰富的断言API &#xff0c;今天我们就来详细看一下Airtest都给我们提供了哪些断言语句。 2. 旧版Airtest提供的断言语句 先回顾下&#xff0c;旧版Airtest一直以来&#xff0c;都只给我们提供了2种断言…