【算法】——前缀和(矩阵区域和详解,文末附)

 8e19eee2be5648b78d93fbff2488137b.png

阿华代码,不是逆风,就是我疯

你们的点赞收藏是我前进最大的动力!!

希望本文内容能够帮助到你!!

目录

一:前缀和模版

二:前缀和模版2

三:寻找数组的中心下标

四:除自身以外数组的乘积

五:和为K的子数组

六:和被k整除的子数组

七:连续数组

八:矩阵区域和


一:前缀和模版

【模板】前缀和_牛客题霸_牛客网

b914124319454b7ca4f99b6dc0c952f4.png

977893da51604d548eb7b243edc840b5.png

import java.util.Scanner;// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {public static void main(String[] args) {Scanner in = new Scanner(System.in);//1:获取输入int n = in.nextInt() , q = in.nextInt();//长度为n的数组,q次查询int[] arr = new int[n+1];for(int i = 1 ; i <= n ; i++){arr[i] = in.nextInt();}//2:创建dp数组long[] dp = new long[n+1]; for(int i = 1 ; i <= n ; i++){dp[i] = dp[i-1] + arr[i];}while(q > 0){int l = in.nextInt() , r = in.nextInt();System.out.println(dp[r]-dp[l-1]);q--;}}
}

二:前缀和模版2

【模板】二维前缀和_牛客题霸_牛客网

ce685505e13641b9a5af94a52da7ce31.png

6685e5b082cd46c78de89621beeff27e.png7e26e020566b4c1987b63f2e779413b8.png

import java.util.Scanner;// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {public static void main(String[] args) {Scanner in = new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别int n = in.nextInt() , m = in.nextInt() , q = in.nextInt();//arr数组long[][] arr = new long[n+1][m+1];for(int i = 1 ; i <= n ; i++){for(int j = 1 ; j <= m ; j++){arr[i][j] = in.nextInt();}}//copy创建一个dp数组long[][] dp = new long[n+1][m+1];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] - dp[i-1][j-1] + arr[i][j];}}while(q > 0){int x1 = in.nextInt() , y1 = in.nextInt() , x2 = in.nextInt() , y2 = in.nextInt();long result = dp[x2][y2] - dp[x2][y1-1] - dp[x1-1][y2] + dp[x1-1][y1-1];System.out.println(result);q--;}}
}

三:寻找数组的中心下标

724. 寻找数组的中心下标 - 力扣(LeetCode)

a2b1281a187c47839f11011c1caae29e.png

07e3e13887b6467aac8368899b5d459f.png

class Solution {public int pivotIndex(int[] nums) {int n = nums.length;//前缀和数组int[] f = new int[n];f[0] = 0;for(int i = 1 ; i < n ; i++){f[i] = f[i-1] + nums[i-1];}   //后缀和数组int[] g = new int[n];g[n-1] = 0;for(int i = n-2 ; i >= 0 ; i--){g[i] = g[i+1] + nums[i+1];}int result = Integer.MAX_VALUE;for(int i = 0 ; i < n ; i++){if(f[i] == g[i]){result = Math.min(result,i);}}if(result == Integer.MAX_VALUE){return -1;}else{return result;}}
}

四:除自身以外数组的乘积

 238. 除自身以外数组的乘积 - 力扣(LeetCode)

bdda15ff74b34fff91fcd8d90a17cfd5.png

db506c245977493086f07b34918b5d0a.png

class Solution {public int[] productExceptSelf(int[] nums) {int n = nums.length;//前缀积int[] f = new int[n];f[0] = 1;for(int i=1 ; i<n ; i++ ){f[i] = f[i-1]*nums[i-1];}int[] g = new int[n];g[n-1] = 1;for(int i=n-2 ; i >= 0 ; i--){g[i] = g[i+1]*nums[i+1];}int[] answer = new int[n];for(int i = 0 ; i < n ; i++){answer[i] = f[i]*g[i];}return answer;}
}

五:和为K的子数组

560. 和为 K 的子数组 - 力扣(LeetCode)

38175f82cfe64fff9f2291e41eeaf002.png

017422b8821741c58740095385ffc998.png

class Solution {public int subarraySum(int[] nums, int k) {Map<Integer,Integer> hash = new HashMap<>();hash.put(0,1);int sum = 0 , ret = 0;for(int x : nums){sum += x;ret += hash.getOrDefault(sum-k,0);hash.put(sum,hash.getOrDefault(sum,0)+1);}return ret;}
}

六:和被k整除的子数组

974. 和可被 K 整除的子数组 - 力扣(LeetCode)

30627592fb08429eae6103ba396a24e6.png

26f49dea7d584e1cbb3d435127c9b5b9.png

class Solution {public int subarraysDivByK(int[] nums, int k) {Map<Integer,Integer> hashMap = new HashMap<Integer,Integer>(); hashMap.put(0 % k , 1);//默认有一个前缀和=0int sum = 0;//前缀和int ret = 0;//用来计数for(int x : nums){sum += x;int remainder = (sum % k + k) % k;ret += hashMap.getOrDefault(remainder,0);hashMap.put(remainder,hashMap.getOrDefault(remainder,0)+1);}return ret;}
}

七:连续数组

525. 连续数组 - 力扣(LeetCode)

014ac6f7fa7d44638292a0fb21655d5f.png

5e00354c1cbb4ecdbfd3039fdcac0042.png

class Solution {public int findMaxLength(int[] nums) {for(int i = 0 ; i < nums.length ; i++){if(nums[i] == 0){nums[i] = -1;}}Map<Integer,Integer> hash = new HashMap<>();hash.put(0,-1);int sum = 0 , ret = 0;for(int i = 0 ; i < nums.length ; i++){sum += nums[i];if(hash.containsKey(sum)){int old = hash.get(sum);int tem = i-old;ret = Math.max(ret,tem);}else{hash.put(sum,i);}}return ret;}
}

八:矩阵区域和

1314. 矩阵区域和 - 力扣(LeetCode)

05557cde976341f99341f10b4a1a4eaa.png

c81ae256e1174ff8b0f53146f9fcf2dd.png

1788f6853651489d8c593028e6e1011e.png

class Solution {public int[][] matrixBlockSum(int[][] mat, int k) {int m = mat.length , n = mat[0].length;//1:初始化dp前缀和数组int[][] dp = new int[m+1][n+1];for(int i = 1 ; i < m+1 ; i++){for(int j = 1 ; j < n+1 ; j++){dp[i][j] = dp[i-1][j] + dp[i][j-1] -dp[i-1][j-1] + mat[i-1][j-1];}}//2:处理前缀和数组int[][] ret = new int[m][n];for(int i = 0 ; i < m ; i++){for(int j = 0 ; j < n ; j++){int x1 = Math.max(0,i-k)+1 , y1 = Math.max(0,j-k)+1;int x2 = Math.min(i+k,m-1)+1 , y2 = Math.min(j+k,n-1)+1;ret[i][j] = dp[x2][y2] - dp[x2][y1-1] -dp[x1-1][y2] + dp[x1-1][y1-1];}}return ret;}
}

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

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

相关文章

数字图像处理(11):RGB转YUV

&#xff08;1&#xff09;RGB颜色空间 RGB颜色空间&#xff0c;是一种基于红色、绿色、蓝色三种基本颜色进行混合的颜色空间&#xff0c;通过这三种颜色的叠加&#xff0c;可以产生丰富而广泛的颜色。RGB颜色空间在计算机图像处理、显示器显示、摄影和影视制作等领域具有广泛应…

nodejs33: react中的IndexedDB 原有API+操作库idb+数据库事务

在 React 中使用 IndexedDB 作为本地数据库存储可以有效地管理大量的数据&#xff0c;比如缓存、离线功能或状态持久化。可以通过索引进行快速查询&#xff0c;支持事务处理&#xff0c;并且异步操作。 特点&#xff1a; 存储键值对。 支持事务。 数据可以分层组织为数据库、…

创造未来:The Sandbox 创作者训练营如何赋能全球创造者

创作者训练营让创造者有能力打造下一代数字体验。通过促进合作和提供尖端工具&#xff0c;The Sandbox 计划确保今天的元宇宙是由一个个创造者共同打造。 2024 年 5 月&#xff0c;The Sandbox 推出了「创作者训练营」系列&#xff0c;旨在重新定义数字创作。「创作者训练营」系…

Linux---对缓冲区的简单理解--第一个系统程序

前序&#xff1a; 首先先理解一下什么是回车与换行&#xff1b;回车和换行是两个概念&#xff0c;它们不是一个东西&#xff1b; 回车:光标回到开始&#xff1b;换行:换到下一行&#xff1b; 如下图&#xff1a; 行缓冲区 如何理解缓冲区问题&#xff1f; 可以认为&#xff0…

线程和进程(juc)

线程 一&#xff1a;概念辨析 1&#xff1a;线程与进程 进程&#xff1a; 1&#xff1a;程序由指令和数据组成&#xff0c;指令要执行&#xff0c;数据要读写&#xff0c;就需要将指令加载给cpu&#xff0c;把数据加载到内存&#xff0c;同时程序运行时还会使用磁盘&#x…

[计算机网络] HTTP/HTTPS

一. HTTP/HTTPS简介 1.1 HTTP HTTP&#xff08;超文本传输协议&#xff0c;Hypertext Transfer Protocol&#xff09;是一种用于从网络传输超文本到本地浏览器的传输协议。它定义了客户端与服务器之间请求和响应的格式。HTTP 工作在 TCP/IP 模型之上&#xff0c;通常使用端口 …

selenium常见接口函数使用

博客主页&#xff1a;花果山~程序猿-CSDN博客 文章分栏&#xff1a;测试_花果山~程序猿的博客-CSDN博客 关注我一起学习&#xff0c;一起进步&#xff0c;一起探索编程的无限可能吧&#xff01;让我们一起努力&#xff0c;一起成长&#xff01; 目录 1. 查找 查找方式 css_s…

新址启新程 宜宾考拉悠然入驻宜宾市大数据产业园

12月4日&#xff0c;宜宾考拉悠然科技有限公司入驻宜宾市大数据产业园&#xff0c;此次喜迁新址&#xff0c;标志其在宜宾业务步入崭新阶段。 2020年&#xff0c;考拉悠然联合四川省人工智能研究院&#xff0c;结合宜宾人工智能科研、产业发展需要&#xff0c;共同孵化了宜宾考…

使用Redis Stream偶发空指针问题

问题描述&#xff1a;使用redission客户端封装的stream消息队列&#xff0c;在进行消息轮询时&#xff0c;偶发出现空指针问题。 [2024-11-13 09:59:20] [] [] [redis-stream-consumer-thread-1 ] [lambda$streamMessageListenerContainer$1] [ERROR] [c.r.c.r.s.config.Redi…

2024年11月HarmonyOS应用开发者高级认证 最新题库

新增单选 1.下述代码片段中的renderGroup属性&#xff0c;对性能的影响是什么&#xff1a;A A.劣化 B.不一定 C.没有变化 D.优化 2.在刷新Image组件内容时&#xff0c;如果观察到画面会闪一下白块&#xff0c;要怎样优化才能避免白块儿出现&#xff0c;同时又不会卡住画面…

大语言模型应用Text2SQL本地部署实践初探

自从两年前OpenAI公司发布ChatGPT后&#xff0c;大模型(Large Language Model&#xff0c;简称LLM)相关技术在国内外可谓百家争鸣&#xff0c;遍地开花&#xff0c;在传统数据挖掘、机器学习和深度学习的基础上&#xff0c;正式宣告进入快速发展的人工智能(Artificial Intellig…

Leetcode—1539. 第 k 个缺失的正整数【简单】

2024每日刷题&#xff08;206&#xff09; Leetcode—1539. 第 k 个缺失的正整数 C实现代码 class Solution { public:int findKthPositive(vector<int>& arr, int k) {int missing 1;int cur 1;int n arr.size();int missingCnt 0;int ptr 0;for(; missingCn…

PSAI海报设计新选择!StartAI Flux文生图一键生成创意海报!

设计师们&#xff0c;是时候展现你们的创意魔力了&#xff01;StartAI的Flux文生图功能&#xff0c;这款专为设计领域打造的创意工具&#xff0c;正等待着为你的圣诞节海报带来无限灵感与活力&#xff01; 想象一下&#xff0c;你的圣诞节海报不再局限于传统的元素和布局&…

Django模板系统

1.常用语法 Django模板中只需要记两种特殊符号&#xff1a; {{ }}和 {% %} {{ }}表示变量&#xff0c;在模板渲染的时候替换成值&#xff0c;{% %}表示逻辑相关的操作。 2.变量 {{ 变量名 }} 变量名由字母数字和下划线组成。 点&#xff08;.&#xff09;在模板语言中有…

使用Java将PDF文件解析成Excel文件

安装pom依赖 <!-- 解析pdf--><dependency><groupId>org.apache.pdfbox</groupId><artifactId>pdfbox</artifactId><version>2.0.27</version> <!-- 请检查并使用最新版本 --></dependency>测试读取pdf文件…

K8S,StatefulSet

有状态应用 Deployment实际上并不足以覆盖所有的应用编排问题&#xff1f; 分布式应用&#xff0c;它的多个实例之间&#xff0c;往往有依赖关系&#xff0c;比如&#xff1a;主从关系、主备关系。 还有就是数据存储类应用&#xff0c;它的多个实例&#xff0c;往往都会在本地…

如何使用Java编写Jmeter函数

Jmeter 自带有各种功能丰富的函数&#xff0c;可以帮助我们进行测试&#xff0c;但有时候提供的这些函数并不能满足我们的要求&#xff0c;这时候就需要我们自己来编写一个自定义的函数了。例如我们在测试时&#xff0c;有时候需要填入当前的时间&#xff0c;虽然我们可以使用p…

单例模式的析构学习

1、例子 如果单例对象是类的static成员&#xff0c;那么在程序结束时不会调用类的析构函数&#xff0c;如下&#xff1a; #include <iostream> using namespace std;class A{ private:static A* m_ins;//声明&#xff0c;静态指针成员A(){} public:static A* getIns(){…

Python 在同一/或不同PPT文档之间复制幻灯片

复制幻灯片可以帮助我们更高效地完成工作&#xff0c;节省大量的制作时间。通过复制现有的幻灯片&#xff0c;可以快速创建新的演示文稿&#xff0c;而无需重新设计板式样式等。此外&#xff0c;复制幻灯片还可以帮助我们保持内容的一致性&#xff0c;使整个PPT演示文稿看起来更…

Fastadmin的定时任务详解

文章目录 Fastadmin的定时任务详解一、引言二、实现定时任务1、创建定时任务控制器2、配置定时任务 三、使用示例1. 编写备份脚本2. 配置定时任务3. 测试定时任务4. 监控备份结果 四、总结 Fastadmin的定时任务详解 一、引言 FastAdmin是一款基于ThinkPHP框架开发的后台管理系…