数组之前缀和

news2024/11/26 14:50:47

1.前缀和

前缀和的概念:前缀和是指数组中从开始位置到当前位置的所有位置的元素之和,它可以通过累加数组元素来计算,一般来说,我们可以使用前缀和数组在常数时间复杂度内计算任意区间的和.

注意:特别是需要频繁的计算区间和的情况,可以通过先预先计算前缀和数组,可以将时间复杂度从O(n)降到O(1)

1.一维数组前缀和

class NumArray {
    private int[] preSum;
    //构造前缀和数组
    public NumArray(int[] nums) {
      int n=nums.length;
      preSum=new int[n+1];
     for(int i=1;i<preSum.length;i++){
         preSum[i]=preSum[i-1]+nums[i-1];
     }
    }
    //查询(left,right)中的元素之和
    public int sumRange(int left, int right) {
     return preSum[right+1]-preSum[left];
    }
}

2.二维数组前缀和

class NumMatrix {
    //构造二维数组
    private int[][] preSum;
    public NumMatrix(int[][] matrix) {
     int row=matrix.length;
     int colum=matrix[0].length;
     preSum=new int[row+1][colum+1];
     for(int i=1;i<preSum.length;i++){
         for(int j=1;j<preSum[0].length;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][col2+1]-preSum[row2+1][col1]+preSum[row1][col1];
    }
}

 

 

假设如果现在有一个二维数组,让你去求二维数组的前缀和怎么算?

 

我们首先要创建一个n+1长度的二维数组

 

我们在这里先要知道二维数组的面积是怎么算的

 

 

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

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

相关文章

经典神经网络(7)DenseNet及其在Fashion-MNIST数据集上的应用

经典神经网络(7)DenseNet及其在Fashion-MNIST数据集上的应用 1 DenseNet的简述 DenseNet不是通过更深或者更宽的结构&#xff0c;而是通过特征重用来提升网络的学习能力。 ResNet 的思想是&#xff1a;创建从“靠近输入的层” 到 “靠近输出的层” 的直连。而DenseNet 做得更…

idea取消右侧边缘提示信息;IDEA使用心得:工作区右边框提示信息

idea的提示是很人性的&#xff0c;合理使用一定程度上也会提升个人的编码水平 最终效果&#xff1a;能看到weak warning个数&#xff0c;但侧边栏不会显示直接清爽 但是idea在检查代码时有一种警告叫做weak warning 什么是weak warning 图中这种只是其中一种&#xff0c;这种…

导出本地文件(模板)

/*** 导出模板*/GetMapping("export/template")ApiOperationSupport(order 16)ApiOperation(value "导出模板")public void exportTemplate(HttpServletResponse response) {List<JointExcel> list new ArrayList<>();ClassPathResource cl…

Fortran 中的 goto 语句

注意项 避免滥用&#xff1a;Fortran 90引入了结构化编程的概念&#xff0c;切记不要滥用goto语句明确标签&#xff1a;在使用goto语句时&#xff0c;标签要明确避免跳转过多&#xff1a;过多的跳转会增加代码的复杂性和可读性避免跳转到循环内部&#xff1a;在循环内部使用go…

力扣 93. 复原 IP 地址

题目来源&#xff1a;https://leetcode.cn/problems/restore-ip-addresses/description/ C题解&#xff1a;递归回溯法。 递归参数&#xff1a;因为不能重复分割&#xff0c;需要ind记录下一层递归分割的起始位置&#xff1b;还需要一个变量num&#xff0c;记录ip段的数量。递…

【设计模式】第二十章:解释器模式详解及应用案例

系列文章 【设计模式】七大设计原则 【设计模式】第一章&#xff1a;单例模式 【设计模式】第二章&#xff1a;工厂模式 【设计模式】第三章&#xff1a;建造者模式 【设计模式】第四章&#xff1a;原型模式 【设计模式】第五章&#xff1a;适配器模式 【设计模式】第六章&…

中国移动九天毕昇部署fastchat Ubuntu18.04+torch1.13.1+cuda11.6+python3.9

8核CPU,RAM32G 时间&#xff1a;2023年7月 项目地址:GitHub - lm-sys/FastChat: An open platform for training, serving, and evaluating large language models. Release repo for Vicuna and FastChat-T5. 体验地址:https://chat.lmsys.org/ 时间20230703&#xff0c;fas…

【Web3】Web3连接到以太坊网络(测试网、主网)

目录 什么是Web3 Web3项目连接以太坊网络 1.下载Web3 2.实例化Web3对象 3.infura 获取连接以太坊网络节点 4.添加网络节点 什么是Web3 web3.js开发文档&#xff1a;web3.js - Ethereum JavaScript API — web3.js 1.0.0 documentation web3.js 中文文档 : web3.js - 以…

【观察】技术创新+以行践言双管齐下,戴尔科技加速边缘计算落地

众所周知&#xff0c;随着混合多云的快速发展&#xff0c;来自百行千业的用户都在通过混合多云的策略推进加速企业的数字化转型&#xff0c;其中边缘计算由于能够在靠近数据生成的地点和位置就近提供计算、网络、智能等关键能力&#xff0c;其不仅正成为构建“云边端”一体化的…

实验:验证TCP套接字传输的数据不存在数据边界

来源&#xff1a;《TCP/IP网络编程》 学习ing 自己动手&#xff0c;把坑踩一遍&#xff0c;也可以学习到很多。 Linux环境下: 客户端&#xff1a; #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <…

23西安电子科技大学人工智能学院821考研录取情况

23西安电子科技大学人工智能学院821考研录取情况 01、人工智能学院各个方向 02、23人工智能学院一志愿考研录取情况总览、均分 PS&#xff1a;智能院23年院线相对于22年院线下降很多分&#xff0c;对于广大考生来说是一个好事 PS&#xff1a;1、总成绩均分在330-345之间&#…

封装一个类似微信通讯录带有字母检索功能的vue组件

这里我们直接使用scrollIntoView方法 该方法将调用它的元素滚动到浏览器窗口的可见区域 语法 element.scrollIntoView&#xff08;&#xff09;; // 等同于element.scrollIntoView(true) element.scrollIntoView&#xff08;alignToTop&#xff09;; //布尔参数 element.scro…

新颖的文档、视频交互方式:以《GPT API Unofficial Docs》和《渐构》为例

一、背景 无意中看到一份 《GPT API 非官方文档》&#xff1a;https://gpt.pomb.us/ 被网站的交互方式所吸引&#xff0c;颇为新颖&#xff0c;值得借鉴。 左侧是对应的 API 代码调用示例&#xff0c;右侧是文档的每个部分&#xff0c;滑动到对应部分&#xff0c;左侧相关的代…

前台-倒计时hooks

import { useIntervalFn } from @vueuse/core import { ref, onUnmounted } from vue// 全部显示 天、时、分、秒 const setAllCountdownStr = (value: number) => {let second = parseInt(value.toString())const day = second / (3600 * 24) //3600秒等于60分钟等于1小时s…

已上架的App在AppStore上无法搜索到的问题

已上架的App在AppStore上无法搜索到的问题 在AppStore上搜不到已经上架的应用程序可以采取以下解决办法&#xff1a; 拨打iTunes提供的支持电话&#xff1a;4006-701-855&#xff08;中国时间9:00-17:00&#xff09;。发送邮件给Review团队&#xff0c;在iTunes Connect登录后…

ElasticSearch8.x和Java API Client

建议 建议直接阅读我的博客原文 10.4 Java API Client操作-索引库/文档 客户端更新 ES为不同语言提供了用于操作ES的客户端&#xff0c;截至2023年7月4日&#xff0c;根据官网Java REST Client已经被弃用&#xff0c;取而代之的是Java API Client&#xff0c;黑马的教程里都…

Docker(一)之 应用(Application)部署容器化的演进之路

前言 容器化技术可以帮助企业更大化资源利用&#xff0c;同时帮助项目相关人员&#xff08;开发、运维、测试、安全等&#xff09;以最小的成本实现项目快速上云部署&#xff0c;掌握容器化管理工具Docker&#xff0c;就掌握了云原生最基础、最核心技术之一 应用&#xff08;…

springboot整合hibernate,gradle,达梦8数据库,实现增删改查的功能

1.新建一个springboot项目&#xff0c;选择gradle管理 2.gradle添加以下依赖&#xff0c;gradle版本7.4 dependencies {// https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-webimplementation org.springframework.boot:spring-boot-starter…

Pytorch深度强化学习1-3:策略评估与贝尔曼期望方程详细推导

目录 0 专栏介绍1 从一个例子出发2 回报与奖赏3 策略评估函数4 贝尔曼期望方程5 收敛性证明 0 专栏介绍 本专栏重点介绍强化学习技术的数学原理&#xff0c;并且采用Pytorch框架对常见的强化学习算法、案例进行实现&#xff0c;帮助读者理解并快速上手开发。同时&#xff0c;辅…

ZUH-ACDM-网络-网闸-根据论坛的案例进行分析

H3C技术论坛&#xff1a;https://zhiliao.h3c.com/Theme/details/64343 文章目录 需求&#xff1a;源地址&#xff1a;172.16.1.33访问目的地址&#xff1a;192.168.4.233确认确定是主机确认外端机连接地址172.16.1.254确认内端机到源地址172.16.1.33是通的确认流量走向/路由第…