力扣labuladong一刷day17天前缀和数组

力扣labuladong一刷day17天前缀和数组

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

题目链接:https://leetcode.cn/problems/range-sum-query-immutable/
思路:本题即为让写一个类用于计算指定区间内的数字和,但如果直接采用for循环的方式,当有很多的输入实例时,会有很多的重复计算,非常浪费时间。
既然是计算区间和的值,那么我们可以提前准备一个前缀和数组,如nums=[a, b, c, d] 前缀和数组为preSum = [a, a+b, a+b+c, a+b+c+d],这样以后再计算区间和只需要使用前缀合数组preSum[right]-preSum[left]即可,这样就把时间复杂度降低到了常量级。是一个不错的小技巧。

class NumArray {int[] preSum;public NumArray(int[] nums) {this.preSum = new int[nums.length+1];for (int i = 1; i < preSum.length; i++) {preSum[i] = preSum[i-1] + nums[i-1];}}public int sumRange(int left, int right) {return preSum[right+1] - preSum[left];}
}

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

题目链接:https://leetcode.cn/problems/range-sum-query-2d-immutable/
思路:这两道前缀和的题目让我收益匪浅,使用前缀和的数组提前计算数组,把时间复杂度降低到O(1)。要想搞清楚前缀和数组,首先要在使用之前把定义明确,本题求二维区域和,定义前缀和数组为:preSum[i][j]为nums数组从区间[0,0]到[i-1, j-1]。明确定义后写递推公式,和动态规划的dp数组特别像, preSum[i][j] = preSum[i-1][j] + preSum[i][j-1]+matrix[i-1][j-1] - preSum[i-1][j-1];
我感觉本题其实就是动态规划的应用。

class NumMatrix {int[][] preSum;public NumMatrix(int[][] matrix) {int m = matrix.length, n = matrix[0].length;this.preSum = new int[m+1][n+1];for (int i = 1; i <= m; i++) {for (int j = 1; j <= n; j++) {preSum[i][j] = preSum[i-1][j] + preSum[i][j-1]+matrix[i-1][j-1] - preSum[i-1][j-1];}}}public int sumRegion(int row1, int col1, int row2, int col2) {return preSum[row2+1][col2+1] + preSum[row1][col1] - preSum[row2+1][col1] - preSum[row1][col2+1];}
}

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

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

相关文章

Unity调用dll踩坑记

请用写一段代码&#xff0c;让unity无声无息的崩溃。 你说这怕是有点难哦&#xff0c;谁会这么不幸呢&#xff1f;不幸的是&#xff0c;我幸运的成为了那个不幸的人。 unity里面调用dll的方式是使用 DllImport &#xff0c;比如有一个 Hello.dll&#xff0c;里面有一个 char* …

图片如何去除水印?试试这三种去水印方法!

从事自媒体行业的小伙伴们&#xff0c;你们是否经常为文章配图而烦恼呢&#xff1f;下载的图片大部分带有各种各样的水印或者多余元素&#xff0c;让人感到困扰。今天&#xff0c;我要分享三个去水印的妙招&#xff0c;这是新媒体人必备的图片处理技能&#xff0c;快来一起学起…

【MATLAB源码-第87期】基于matlab的Q-learning算法栅格地图路径规划,自主选择起始点和障碍物。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 Q-learning是一种无模型的强化学习算法&#xff0c;适用于有限的马尔可夫决策过程&#xff08;MDP&#xff09;。它的核心是学习一个动作价值函数&#xff08;action-value function&#xff09;&#xff0c;即Q函数&#xf…

面试官:【js多维数组扁平化去重并排序】

文章目录 前言方法一方法二方法三方法四总结后言 前言 hello world欢迎来到前端的新世界 &#x1f61c;当前文章系列专栏&#xff1a;JavaScript &#x1f431;‍&#x1f453;博主在前端领域还有很多知识和技术需要掌握&#xff0c;正在不断努力填补技术短板。(如果出现错误&a…

【腾讯云云上实验室-向量数据库】Tencent Cloud VectorDB在实战项目中替换Milvus测试

为什么尝试使用Tencent Cloud VectorDB替换Milvus向量库&#xff1f; 亮点&#xff1a;Tencent Cloud VectorDB支持Embedding&#xff0c;免去自己搭建模型的负担&#xff08;搭建一个生产环境的模型实在耗费精力和体力&#xff09;。 腾讯云向量数据库是什么&#xff1f; 腾…

rsync配置和守护进程实践

目录 一、rsync概念 1.rsync简介 2.rsync特点 3、增量和全局传输 二、Rsync工作方式 1.准备好rsync备份服务器 2.本地的数据传输模式 3.远程的数据传输模式 4.rsync数据推拉模式 三、实践 1.准备三台虚拟机 2.都安装rsync服务 3.拉取远程文件 3.推送文件 4.rsyn…

Oracle用户(User)和表空间(Tablespace)

3. 用户和表空间 3.1. 用户 1)概念 Oracle数据库中,用户(User)是访问数据库的途径和认证方式,同时,用户也是数据库对象的逻辑集合。我们通过数据库用户和密码来登录数据库,然后,可以在该用户下创建和操作数据库对象。 2)创建和配置 创建Oracle用户,需要具备创建…

python系统编程

文章目录 系统编程系统工具概述sys模块os模块 脚本运行上下文当前工作路径命令行参数shell环境变量标准流 文件和目录工具文件工具目录工具 并行系统工具进程分支线程 系统编程 系统工具 概述 python系统模块: 模块名作用*sys负责导出与怕以后呢解释器本身相关的组件*os包含…

Django DRF序列化器serializer

以下案例由浅到深&#xff0c;逐步深入&#xff0c;通过实例介绍了序列化器的使用方法&#xff0c;和其中遇到的常见问题的解决。 一、序列化器serializers.Serializer 1、urls.py urlpatterns [path("api/<str:version>/depart/",views.DepartView.as_vie…

缓存雪崩、击穿、穿透及解决方案_保证缓存和数据库一致性

文章目录 缓存雪崩、击穿、穿透1.缓存雪崩造成缓存雪崩解决缓存雪崩 2. 缓存击穿造成缓存击穿解决缓存击穿 3.缓存穿透造成缓存穿透解决缓存穿透 更新数据时&#xff0c;如何保证数据库和缓存的一致性&#xff1f;1. 先更新数据库&#xff1f;先更新缓存&#xff1f;解决方案 2…

【问题解决】RuntimeError: apex.optimizers.FusedSGD requires cuda extension 问题解决

在使用 apex 库时&#xff0c;按照官方的方式安装后&#xff0c;虽然安装成功&#xff0c;但调用的时候会报错如下&#xff0c;也就是说其实没有成功安装可调用 cuda 的 apex&#xff1a; RuntimeError: apex.optimizers.FusedSGD requires cuda extension我找了很多解决方式&…

【蓝桥杯省赛真题46】Scratch魔术表演 蓝桥杯scratch图形化编程 中小学生蓝桥杯省赛真题讲解

目录 scratch魔术表演 一、题目要求 编程实现 二、案例分析 1、角色分析

微信小程序bindtap和catchtap的区别?

子元素用bindtap绑定事件后&#xff0c;执行的时候&#xff0c;会冒泡到父元素&#xff08;触发父亲元素上绑定的bindtap事件&#xff09; 如果不想冒泡到父元素&#xff0c;可以用catchtap代替 bindtap事件绑定不会阻止冒泡事件向上冒泡 catchtap事件绑定可以阻止冒泡事件向上…

centos 7.7 安装Python-3.7.4

一、安装PYTHON 编译依赖包 1.1 首先安装gcc编译器&#xff0c;gcc有些系统版本已经默认安装&#xff0c;通过 gcc --version 查看&#xff0c;没安装的先安装gcc&#xff0c; yum -y install gcc glibc make1.2 安装其它依赖包&#xff0c;&#xff08;注&#xff1a;不要缺…

【双指针】和为 s 的两个数字

和为 s 的两个数字 文章目录 和为 s 的两个数字题目描述算法思路暴力枚举双指针 代码编写Java代码C代码编写 LCR 179. 查找总价格为目标值的两个商品 - 力扣&#xff08;LeetCode&#xff09; 题目描述 购物车内的商品价格按照升序记录于数组 price。请在购物车中找到两个商品…

Android修行手册-超出父布局进行显示以及超出父布局实现点击

Unity3D特效百例案例项目实战源码Android-Unity实战问题汇总游戏脚本-辅助自动化Android控件全解手册再战Android系列Scratch编程案例软考全系列Unity3D学习专栏蓝桥系列ChatGPT和AIGC &#x1f449;关于作者 专注于Android/Unity和各种游戏开发技巧&#xff0c;以及各种资源分…

shopee数据分析软件丨探索Shopee数据分析软件——知虾

随着电子商务的快速发展&#xff0c;越来越多的商家和企业开始关注数据分析的重要性。在这个竞争激烈的市场中&#xff0c;了解消费者行为、市场趋势和竞争对手的策略是取得成功的关键。而Shopee数据分析软件——知虾&#xff0c;成为了许多商家和企业的首选工具。本文将深入探…

ubuntu20.04 nginx 部署静态网页

1、安装nginx Ubuntu环境下安装部署Nginx&#xff08;有网&#xff09;_ubuntu 安装nginx_荒Huang的博客-CSDN博客 2、压缩并上传文件到服务器指定位置(unzip命令)&#xff0c;修改nginx配置文件&#xff0c;指定root目录为文件的目录&#xff0c;index 值为指定的html文件 …

【拿完年终奖后】想要转行网络安全,一定不要错过这个时间段。

网络安全&#xff0c;作为当下互联网行业中较为热门的岗位&#xff0c;薪资可观、人才需求量大&#xff0c;作为转行必考虑。 在这里奉劝所有零基础想转行&#xff08;入门&#xff09; 网络安全的朋友们 在转行之前&#xff0c;一定要对网络安全行业做一个大概了解&#xf…

latex通过bib添加参考文献作者名字有特殊符号如字母上有两点乱码解决办法

一、背景 在使用latex写英文论文时&#xff0c;一般是通过bib的方式添加参考文献。但有的参考文献作者是法国人或其他国家的&#xff0c;名字会有特殊符号&#xff0c;如某个字母上有两个点&#xff0c;或者声调符号等等&#xff0c;如下图所示&#xff1a; 如果不进行特殊操作…