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

想要精通算法和SQL的成长之路 - 前缀和的应用

想要精通算法和SQL的成长之路 - 前缀和的应用

  • 前言
  • 一. 区域和检索 - 数组不可变
  • 二. 二维区域和检索 - 矩阵不可变
    • 2.1 前缀和的计算
    • 2.2 用前缀和计算二维区域和
  • 三. 矩形区域不超过 K 的最大数值和

前言

想要精通算法和SQL的成长之路 - 系列导航

一. 区域和检索 - 数组不可变

原题链接
在这里插入图片描述
思路如下:

  1. 我们统计每个元素的前缀和为preSum(i) ,不包括num[i]的值。
  2. 那么对于索引[left, right]之间的和,就可以利用前缀和来计算,值为:preSum(right+1) - preSum(left)

代码如下:

public class NumArray {int[] preSums;public NumArray(int[] nums) {int n = nums.length;// 计算前缀和,指 preSums[i] 在下标i之前的元素和preSums = new int[n + 1];for (int i = 0; i < n; i++) {preSums[i + 1] = preSums[i] + nums[i];}}public int sumRange(int left, int right) {return preSums[right + 1] - preSums[left];}
}

二. 二维区域和检索 - 矩阵不可变

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

2.1 前缀和的计算

我们先来看下,对于任意一个元素,从下标 (0,0)(i,j) 之间的区域和怎么计算。如图:
在这里插入图片描述
换成代码就是:

preSums[i][j] = preSums[i][j - 1] + preSums[i - 1][j] - preSums[i - 1][j - 1] + matrix[i-1][j-1];

2.2 用前缀和计算二维区域和

如图:我们想计算A到D之间的区域和:
在这里插入图片描述
代码如下:(在设置二维数组的时候,可以增加一行和一列作为虚拟节点,数值为0)

preSums[row2+1][col2+1] - preSums[row2+1][col1] - preSums[row1][col2+1] + preSums[row1][col1];

完整代码如下:

public class NumMatrix {int preSums[][];public NumMatrix(int[][] matrix) {int row = matrix.length + 1;int col = matrix[0].length + 1;preSums = new int[row][col];// 第一列第一行的数值都是0for (int i = 1; i < row; i++) {for (int j = 1; j < col; j++) {preSums[i][j] = preSums[i][j - 1] + preSums[i - 1][j] - preSums[i - 1][j - 1] + matrix[i-1][j-1];}}}public int sumRegion(int row1, int col1, int row2, int col2) {return preSums[row2+1][col2+1] - preSums[row2+1][col1] - preSums[row1][col2+1] + preSums[row1][col1];}
}

三. 矩形区域不超过 K 的最大数值和

原题链接
在这里插入图片描述
这题目可以在题目二的基础上,我们自行遍历,以开始节点(startRow,startCol) 为起始位置,在遍历所有情况的结束节点(endRow,endCol) 之间的区域和。满足条件:

  • startRow <= endRow < row
  • startCol <= endCol < col

由于是二维空间,两个节点,因此一共是4层循环:

public class Test363 {int preSum[][];public int maxSumSubmatrix(int[][] matrix, int k) {int row = matrix.length + 1;int col = matrix[0].length + 1;preSum = new int[row][col];// 结算前缀和for (int i = 1; i < row; i++) {for (int j = 1; j < col; j++) {preSum[i][j] = preSum[i][j - 1] + preSum[i - 1][j] - preSum[i - 1][j - 1] + matrix[i - 1][j - 1];}}int max = Integer.MIN_VALUE;// 起始节点的横纵坐标for (int startRow = 1; startRow < row; startRow++) {for (int startCol = 1; startCol < col; startCol++) {// 结束节点的横纵坐标for (int endRow = startRow; endRow < row; endRow++) {for (int endCol = startCol; endCol < col; endCol++) {// 求得两个节点之间的区域和int sumRegion = sumRegion(startRow, startCol, endRow, endCol);if (sumRegion <= k) {max = Math.max(max, sumRegion);}}}}}return max;}public int sumRegion(int row1, int col1, int row2, int col2) {return preSum[row2][col2] - preSum[row2][col1 - 1] - preSum[row1 - 1][col2] + preSum[row1 - 1][col1 - 1];}
}

相关文章:

想要精通算法和SQL的成长之路 - 前缀和的应用

想要精通算法和SQL的成长之路 - 前缀和的应用 前言一. 区域和检索 - 数组不可变二. 二维区域和检索 - 矩阵不可变2.1 前缀和的计算2.2 用前缀和计算二维区域和 三. 矩形区域不超过 K 的最大数值和 前言 想要精通算法和SQL的成长之路 - 系列导航 一. 区域和检索 - 数组不可变 原…...

如何让大模型自由使用外部知识与工具

本文将分享为什么以及如何使用外部的知识和工具来增强视觉或者语言模型。 全文目录&#xff1a; 1. 背景介绍 OREO-LM: 用知识图谱推理来增强语言模型 REVEAL: 用多个知识库检索来预训练视觉语言模型 AVIS: 让大模型用动态树决策来调用工具 技术交流群 建了技术交流群&a…...

关注用户信息卡片

效果展示 CSS 知识点 box-shadow 属性回顾CSS 变量回顾 实现页面整体布局 <div class"card"><div class"box"><!-- 视频 --><div class"vide_box"><video src"user.mp4" type"video/mp4" aut…...

【Java基础面试十八】、说一说重写与重载的区别

文章底部有个人公众号&#xff1a;热爱技术的小郑。主要分享开发知识、学习资料、毕业设计指导等。有兴趣的可以关注一下。为何分享&#xff1f; 踩过的坑没必要让别人在再踩&#xff0c;自己复盘也能加深记忆。利己利人、所谓双赢。 面试官&#xff1a;说一说重写与重载的区别…...

Linux文件管理(上)

一、VIM编辑器 1、vi概述 vi&#xff08;visual editor&#xff09;编辑器通常被简称为vi&#xff0c;它是Linux和Unix系统上最基本的文本编辑器&#xff0c;类似于Windows 系统下的notepad&#xff08;记事本&#xff09;编辑器。 2、vim编辑器 Vim(Vi improved)是vi编辑器…...

docker 复习

文章目录 1. docker 基础1.1 docker 安装配置镜像加速器拉取镜像的仓库&#xff1a; docker 部署Mysql 镜像docker 命令的详细解释docker 常见命令docker 数据卷docker 相关命令总结 2.自定义镜像2.1 dockerfile2.2 try 构建一个Java镜像&#xff0c;并部署2.3 总结: 3. docker…...

React之事件机制与事件绑定

一&#xff0c;时间机制 是什么 React基于浏览器的事件机制自身实现了一套事件机制&#xff0c;包括事件注册、事件的合成、事件冒泡、事件派发等 在React中这套事件机制被称之为合成事件 合成事件&#xff08;SyntheticEvent&#xff09; 合成事件是 React模拟原生 DOM事…...

spark stream入门案例:netcat准实时处理wordCount(scala 编程)

目录 案例需求 代码 结果 解析 案例需求&#xff1a; 使用netcat工具向9999端口不断的发送数据&#xff0c;通过SparkStreaming读取端口数据并统计不同单词出现的次数 -- 1. Spark从socket中获取数据&#xff1a;一行一行的获取 -- 2. Driver程序执行时&#xff0c…...

Ansible基础及模块

Ansible是一个基于Python开发的配置管理和应用部署工具&#xff0c;能批量配置、部署、管理上千台主机。比如以前需要切换到每个主机上执行的一或多个操作&#xff0c;使用Ansible只需在固定的一台Ansible控制节点上去完成所有主机的操作 Ansible是基于模块工作的&#xff0c;它…...

Atlassian Confluence OGNL表达式注入RCE CVE-2021-26084

影响版本 All 4.x.x versions All 5.x.x versions All 6.0.x versions All 6.1.x versions All 6.2.x versions All 6.3.x versions All 6.4.x versions All 6.5.x versions All 6.6.x versions All 6.7.x versions All 6.8.x versions All 6.9.x versions All 6.1…...

【c语言】编译链接--详解

文章目录 一.程序的翻译环境和运行环境二.翻译环境&#xff1a;预编译编译汇编链接&#xff08;一&#xff09;预编译&#xff08;二&#xff09;编译1&#xff09;词法分析2&#xff09;语法分析3&#xff09;语义分析 &#xff08;三&#xff09;汇编(四&#xff09;链接1.编…...

国家开放大学 训练题

试卷代号&#xff1a;2044 教育研究方法 参考试题&#xff08;开卷&#xff09; 一、单选题&#xff08;每题5分&#xff0c;共25分&#xff09; 1.探索性研究常采用的研究方式包括&#xff08; &#xff09;。 A.文献调查、经验调查、典型情况或个案分析 B.调查性研究、…...

【灵动 Mini-G0001开发板】+Keil5开发环境搭建+ST-Link/V2程序下载和仿真+4颗LED100ms闪烁。

我们拿到手里的是【灵动 Mini-G0001开发板】 如下图 我们去官网下载开发板对应资料MM32G0001官网 我们需要下载Mini—G0001开发板的库函数与例程&#xff08;第一手学习资料&#xff09;Keil支持包&#xff0c; PCB文件有需要的&#xff0c;可以自行下载。用户指南需要下载&a…...

同为科技(TOWE)关于风力发电雷电防护的解决方案

风能作为一种可再生清洁能源&#xff0c;是国家新能源发展战略的重要组成部分。我国风能开发潜力高达2.510GW以上&#xff0c;近年来风力发电机组逐年增加&#xff0c;截止到2022年&#xff0c;全国风电装机容量约3.5亿千瓦&#xff0c;同比增长16.6%。然而&#xff0c;由于风力…...

gorm 中的事务运用

使用背景 在编写业务代码的过程中,如果涉及到多张表的更新操作,为了确保数据的一致性,我们会在业务代码的过程中加上事务的控制,那么针对go 语言中,如果我们使用gorm框架改如何操作呢? gorm中使用事务的几种方式 方式一(业务层事务)func NewTransaction() *gorm.DB {re…...

maven 新建模块 导入后 按Ctrl 点不进新建模块pom定义

新建的ruoyi-common-mybatisplus 模块,导入一直不正常 画出的模块一直导入不进来 这是提示信息 这是正常的提示信息 加上 <version>3.6.3</version> 后,才一切正常...

idea使用debug无法启动,使用run可以启动

1、将调试断点清除 使用快捷键ctrl shift F8&#xff0c;将勾选的选项去除即可 2、Error running SampleApplication: Command line is too long. Shorten command line for SampleApplication or also for Spring Boot default configuration&#xff0c;报这种错误&#x…...

进程的虚拟地址空间

一、 对于C/C程序员&#xff0c;我们看到的程序中的地址&#xff0c;都不是物理地址&#xff0c;而是操作系统映射的虚拟地址/线性地址&#xff0c;每一个进程都映射了同样结构的虚拟地址空间&#xff0c;让进程以为自己在独享内存资源&#xff0c;下图是以Linux下32位操作系统…...

做web自动化测试遇到Chrome浏览器老是自动更新,怎么办 ? 这里提供两个解决办法 。

web自动化安装驱动安装 进行web自动化时 &#xff0c;需要提前安装浏览器的驱动 &#xff0c;尤其是chrome浏览器 。它的更新速度很快 &#xff0c;是不是更新了新版本 。这就导致我们的驱动也要跟着变化。 1.停止自动更新 那么 &#xff0c;如何关闭chrome浏览器的自动更新…...

腾讯HR面试

一、如何看待腾讯的愿景 腾讯的愿景是成为“最受尊敬的互联网企业”&#xff0c;这一愿景表明了腾讯的目标是成为一个在互联网领域内具有极高影响力和声誉的企业。 为了实现这一愿景&#xff0c;腾讯坚持以长远的眼光、诚信负责的操守、共同成长的理念来发展公司的事业。这种…...

10类Visdron2019遥感小目标检测数据集该数据集为原始数据集,未经任何图像预处理操作数据集共计8629张图片,分别有对应的标签数据集已划分为训练集、验证集和测试集数据集包括txt格式、

10类Visdron2019遥感小目标检测数据集 该数据集为原始数据集&#xff0c;未经任何图像预处理操作 数据集共计8629张图片&#xff0c;分别有对应的标签 数据集已划分为训练集、验证集和测试集 数据集包括txt格式、xml格式、json格式 相关YOLOv5~YOLOv9模型可直接使用 相关Faster…...

利用快马AI快速生成Android Studio天气预报应用原型

最近在尝试开发一个简单的天气预报应用&#xff0c;发现用传统方式从零开始搭建Android项目框架特别耗时。特别是Gradle配置和各种依赖项的引入&#xff0c;经常要反复调试。后来尝试了InsCode(快马)平台&#xff0c;发现它的AI生成功能能极大提升原型开发效率&#xff0c;这里…...

37、【Agent】【OpenCode】本地代理分析(一)

【声明】本博客所有内容均为个人业余时间创作&#xff0c;所述技术案例均来自公开开源项目&#xff08;如Github&#xff0c;Apache基金会&#xff09;&#xff0c;不涉及任何企业机密或未公开技术&#xff0c;如有侵权请联系删除 背景 上篇 blog 【Agent】【OpenCode】本地代…...

StructBERT-Large镜像部署教程:GPU加速推理环境搭建指南

StructBERT-Large镜像部署教程&#xff1a;GPU加速推理环境搭建指南 1. 环境准备与快速部署 在开始部署StructBERT-Large镜像之前&#xff0c;我们需要确保基础环境配置正确。这个步骤将帮助你快速搭建起可运行的GPU加速推理环境。 1.1 硬件与系统要求 为了获得最佳性能&am…...

AI辅助开发:利用快马多模型AI为9·1免费素材网站添加智能搜索与推荐

AI辅助开发&#xff1a;利用快马多模型AI为91免费素材网站添加智能搜索与推荐 最近在做一个免费素材网站的项目&#xff0c;需要为91免费素材平台添加智能搜索和推荐功能。传统的关键词搜索已经不能满足用户需求了&#xff0c;特别是对于设计素材这种视觉化内容。正好发现了In…...

如何让JSON数据在前端项目中优雅可视化和交互?

如何让JSON数据在前端项目中优雅可视化和交互&#xff1f; 【免费下载链接】json-formatter-js Render JSON objects in beautiful HTML (pure JavaScript) 项目地址: https://gitcode.com/gh_mirrors/js/json-formatter-js 在复杂的前端开发场景中&#xff0c;JSON数据…...

CNN技术在PP-DocLayoutV3中的应用与优化

CNN技术在PP-DocLayoutV3中的应用与优化 1. 引言 文档布局分析是OCR和文档理解的基础环节&#xff0c;传统方法依赖矩形框检测&#xff0c;在处理复杂文档时往往力不从心。PP-DocLayoutV3作为新一代统一文档布局分析引擎&#xff0c;采用实例分割技术输出像素级掩码与多点边界…...

【自动驾驶 VLA 技术解析】视觉-语言-动作模型的架构与实践

文章目录自动驾驶 VLA 技术解析&#xff1a;视觉-语言-动作模型的架构与实践一、引言二、为什么需要 VLA2.1 三代范式演进2.2 VLA 相对 VLM 的核心升级三、VLA 核心架构拆解3.1 三模块统一框架3.2 两大架构范式3.3 动作输出的三种形式四、代表性架构深度解析4.1 OpenDriveVLA&a…...

BiliTools:跨平台资源管理的开源解决方案

BiliTools&#xff1a;跨平台资源管理的开源解决方案 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱&#xff0c;支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools 在数字内容爆炸…...

Phi-3-mini-4k-instruct-gguf代码实例:curl健康检查+supervisor服务控制命令大全

Phi-3-mini-4k-instruct-gguf代码实例&#xff1a;curl健康检查supervisor服务控制命令大全 1. Phi-3-mini-4k-instruct-gguf简介 Phi-3-mini-4k-instruct-gguf是微软Phi-3系列中的轻量级文本生成模型GGUF版本&#xff0c;特别适合问答、文本改写、摘要整理和简短创作等场景。…...