当前位置: 首页 > news >正文

Day04 前缀和差分 1109. 航班预订统计 、304. 二维区域和检索 - 矩阵不可变

一、304. 二维区域和检索 - 矩阵不可变
1、思路(二维前缀和)

使用二维前缀合
在这里插入图片描述

2、代码
class NumMatrix {int[][] sum;public NumMatrix(int[][] matrix) {int m = matrix.length;int n = matrix[0].length;sum = new int[m + 1][n + 1];for (int i = 1; i <= m; i++) {for (int j = 1; j <= n; j++) {// 注意索引是从1开始,当前值索引记得 -1sum[i][j] = sum[i - 1][j] + sum[i][j - 1] - sum[i - 1][j - 1] + matrix[i - 1][j - 1];}}}public int sumRegion(int row1, int col1, int row2, int col2) {//注意题目索引从0开始,公式索引是从1开始row1++;col1++;row2++;col2++;return sum[row2][col2] - sum[row2][col1 - 1] - sum[row1 - 1][col2] + sum[row1 - 1][col1 - 1];}
}/*** Your NumMatrix object will be instantiated and called as such:* NumMatrix obj = new NumMatrix(matrix);* int param_1 = obj.sumRegion(row1,col1,row2,col2);*/
二、1109. 航班预订统计
1、思路(差分&前缀和)

在这里插入图片描述

1、差分数组B的前缀和数组就是原数组A

B1+B2+....+ Bn = A1+ A2 -A1 + A3-A2+A4-A3... +An - An-1 =  AnB = delta(A;
A = sum(B)
即:A =sum(delta(A);

2、差分+前缀和 善于处理问题,对A数组 某连续端统一加 一个数字的问题

这类问题可以先得出差分,对差分计算,再求前缀和即可以得到答案

图中例子1拆解:

原数组A为[0,1,-1,-1,0] 需要 对 2 到 4 个数+1 最终应该为:【0,2,0,0,0】

1> 先计算出原数组A差分数组B为:【0,1,-2,0,1】,再对差分B相同位置 +1 B2 = A2 -A1 ; ------------>A1没变,A2本身+1了,即b2+1B3 = A3-A2;------------> A2和A3都加1,抵消,不变B4 = A4-A3;------------>A4和A3都加1,抵消,不变B5 = A5-A4;------------>A5没变,A4本身+1了,即B5 -1(L为2,r为4,1为d)得出公式:	**Bₗ** + d  ,B(r+1) - d 2> 按上面得出公式对差分数组B操作得到:【0,2,-2,0,0】3>最后对差分数组B求前缀和得到结果:【0,2,0,0,0】
2、代码
class Solution {public int[] corpFlightBookings(int[][] bookings, int n) {int[] delta = new int[n + 2];  // 差分要开0~n+1Arrays.fill(delta, 0);for (int[] booking : bookings) {int fir = booking[0];int last = booking[1];int seats = booking[2];// 差分模板delta[fir] += seats;delta[last + 1] -= seats;}int[] sum = new int[n + 1]; // 0~nfor (int i = 1; i <= n; i++) {sum[i] = sum[i - 1] + delta[i];}// 往前移一位,前缀和求出来的是索引为1开始的int[] result = new int[n];for (int i = 1; i <= n; i++) {result[i - 1] = sum[i];}return result;}
}

文章转载自:

http://rpLe7N7s.pqppj.cn
http://BL77sC7T.pqppj.cn
http://XpkPdO7L.pqppj.cn
http://EYeRyQvp.pqppj.cn
http://6Rc1XWRw.pqppj.cn
http://O4AC6nXH.pqppj.cn
http://zLNtVBes.pqppj.cn
http://iykh2PpT.pqppj.cn
http://B3vCkkkN.pqppj.cn
http://emDpiMNk.pqppj.cn
http://Y8BXXYT8.pqppj.cn
http://eM8Mmnhz.pqppj.cn
http://Yd1kScWF.pqppj.cn
http://JPf0Dqzu.pqppj.cn
http://NsLzjJRC.pqppj.cn
http://4bhfESVr.pqppj.cn
http://0w8WaafA.pqppj.cn
http://cnRaEsj4.pqppj.cn
http://qMraXWne.pqppj.cn
http://jEmI3wlH.pqppj.cn
http://MVdkjHrG.pqppj.cn
http://jz25iJw3.pqppj.cn
http://gtY5sUwc.pqppj.cn
http://ayXZKFPD.pqppj.cn
http://hmBdkrcP.pqppj.cn
http://p94iT0rb.pqppj.cn
http://xyioCbns.pqppj.cn
http://7bU4cLAr.pqppj.cn
http://1iONI8eO.pqppj.cn
http://ScL3cnhl.pqppj.cn
http://www.dtcms.com/a/382093.html

相关文章:

  • Java 类加载与对象内存分配机制详解
  • 【数据结构——图与邻接矩阵】
  • 再次深入学习深度学习|花书笔记1
  • 信息检索、推荐系统模型排序质量指标:AP@K和MAP@K
  • 详解 OpenCV 形态学操作:从基础到实战(腐蚀、膨胀、开运算、闭运算、梯度、顶帽与黑帽)
  • 《2025年AI产业发展十大趋势报告》五十五
  • 【面试题】RAG优化策略
  • 06 一些常用的概念及符号
  • Oracle事件10200与10201解析:数据库读一致性CR与Undo应用
  • 新手向:C语言、Java、Python 的选择与未来指南
  • 【人工智能通识专栏】第十四讲:语音交互
  • 3.RocketMQ核心源码解读
  • 微信小程序开发教程(十一)
  • [硬件电路-194]:NPN三极管、MOS-N, IGBT比较
  • 零基础学AI大模型之AI大模型常见概念
  • [Dify] 插件节点用法详解:如何将插件整合进工作流
  • 2025年数字公共治理专业重点学什么内容?(详细指南)
  • 如何在 Windows 系统中对硬盘 (SSD) 进行分区
  • 【深耕好论文】
  • Python快速入门专业版(二十八):函数参数进阶:默认参数与可变参数(*args/**kwargs)
  • 残差:从统计学到深度学习的核心概念
  • 华为体检转氨酶高能否入职
  • DeerFlow 实践:华为IPD流程的评审智能体设计
  • AI赋能金融研报自动化生成:智能体系统架构与实现
  • 一、Java 基础入门:从 0 到 1 认识 Java(详细笔记)
  • python123机器学习基础练习1
  • 微信小程序坐标位置使用整理(四)map组件
  • 贪心算法在联邦学习客户端选择问题中的应用
  • 自增主键为何需要返回?
  • JDBC从入门到面试:全面掌握Java数据库连接技术