【算法】前缀和例题讲解

news2024/11/25 23:41:17

例一:

724. 寻找数组的中心下标

思路:

典型的前缀和题目,我们只需要创建前缀和数组和后缀和数组,然后一一寻找两者相等的下标即可。

代码:

class Solution {
public:
    int pivotIndex(vector<int>& nums) {
        //本题难点在于计算前缀和后缀和数组。
        int n = nums.size();
        vector<int> f(n), g(n);
        //创建前缀和后缀和数组
        for(int i = 1;i < n;i++)
            f[i] = f[i-1] + nums[i-1];
        for(int i = n-2;i > -1;i--)
            g[i] = g[i+1] + nums[i+1];
        for(int i = 0;i < n;i++)
        {
            if(f[i] == g[i])
                return i;
        }
        return -1;
    }
};

例二、238. 除自身以外数组的乘积

思路:

本题跟第一题的思路基本一样,只不过把和改成乘积,依然用前缀思想即可。

代码:

class Solution {
public:
    vector<int> productExceptSelf(vector<int>& nums) {
        int n = nums.size();
        vector <int> f(n,1),g(n,1),ans(n);
        //分别计算前缀乘积和后缀乘积
        for(int i = 1;i<n;i++)
            f[i] = f[i-1] * nums[i-1];
        for(int i = n-2;i>-1;i--)
            g[i] = g[i+1] * nums[i+1];
        for(int i = 0;i<n;i++)  
            ans[i] = f[i] * g[i];
        return ans;
    }
};

例3:560. 和为 K 的子数组

思路:前缀和 + 哈希表

本题比较前面的题有难度,我们首先要引入一个概念,在动态规划中,以i位置为结尾的所有子数组

这样肯定是能列举所有的情况。

假定以i位置为结尾的子数组的值就是k,那么前面的数组和就是sum-k,因此我们就要在前面利用前缀和去寻找值为sum-k。

细节问题:

  1. 在计算i位置之前,哈希表里面只保存【0,i-1】位置的前缀和
  2. 不用真的创建一个前缀和数组,用一个变量sum来标记前一个位置的前缀和即可
  3. 如果整个前缀和等于k呢?hash[0] = 1;

代码:

class Solution {
public:
    int subarraySum(vector<int>& nums, int k) {
        unordered_map<int,int> hash;//<前缀和,前缀和出现次数>
        //特殊情况,sum直接等于k
        hash[0] = 1;
        int sum = 0;
        int num = 0;//记录出现的次数
        for(int i = 0;i<nums.size();i++)
        {
            sum += nums[i];
            if(hash.count(sum - k))
                num += hash[sum - k];
            hash[sum]++;
        }
        return num;
    }

};

例4:

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

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

相关文章

华发股份:销售排名稳居TOP10 谱写高质量发展新篇章

2024年8月30日晚&#xff0c;华发股份&#xff08;600325.SH&#xff09;发布2024年半年度报告。报告显示&#xff0c;公司实现营业总收入248.42亿元&#xff0c;归母净利润12.65亿元。面对复杂多变的宏观环境和行业调整的挑战&#xff0c;华发股份依然能够稳固其经营根基&…

Elastic Search(五):索引生命周期管理 - ilm

目录 1 ES&#xff1a;索引生命周期管理 - ilm1.1 介绍1、ILM阶段转换阶段执行阶段操作 1.2 索引生命周期操作1、设置 索引生命周期 1.3 索引生命周期管理1、创建 生命周期策略2、创建索引模板&#xff0c;模板中关联 policy3、创建符合模板的起始索引&#xff0c;设置别名(即我…

无人机操控师技术及前景详解

随着科技的飞速发展和无人机技术的日益成熟&#xff0c;无人机在各行各业的应用越来越广泛&#xff0c;从农业植保、物流配送到影视拍摄、灾害救援&#xff0c;无人机技术正深刻改变着传统行业的运作模式。在这一背景下&#xff0c;无人机操控师作为无人机技术的核心操作者&…

Oracle查询优化--分区表建立/普通表转分区表

本文介绍了Oracle表分区的方法&#xff0c;将已有的非分区表转化为分区表&#xff0c;也可以直接建立新的分区表&#xff0c;从而实现大表查询的优化。主要通过DBMS_REDEFINITION 和 alter table xxx modify 方法&#xff0c;DBMS_REDEFINITION 适用于所有版本&#xff0c;操作…

Spring扩展点系列-InitializingBean

文章目录 简介应用场景代码示例运行示例 简介 这篇文章主要介绍了Spring中InitializingBean的使用详细解析&#xff0c;InitializingBean是Spring提供的拓展性接口&#xff0c;提供了属性初始化后的处理方法,它只有一个afterPropertiesSet方法&#xff0c;凡是继承该接口的类&…

8G 显存玩转书生大模型

1. 启动demo 输出300字小故事 2. Streamlit Web Demo 部署InternLM2-Chat-1.8B 模型 安装依赖 让他输出helloworld

java基础 之 接口

文章目录 前言接口浅浅理解下接口抽象类与接口的爱恨情仇特点接口的回调 抽象类和接口相同之处区别 前言 前文回顾 戳这里→java基础 之 抽象类 因为接口是对抽象类的一种延伸&#xff0c;所以请先了解一下抽象类会更好的理解接口哦 子类对抽象类叫继承&#xff0c;使用关键字e…

Python 从入门到实战3(列表的简单操作)

我们的目标是&#xff1a;通过这一套资料学习下来&#xff0c;通过熟练掌握python基础&#xff0c;然后结合经典实例、实践相结合&#xff0c;使我们完全掌握python&#xff0c;并做到独立完成项目开发的能力。 上篇文章我们通过python小栗子来学习python基础知识语法&#xff…

怎样还原空白试卷?2024快速空白试卷还原软件合集

怎样还原空白试卷&#xff1f;2024快速空白试卷还原软件合集 在教育和考试过程中&#xff0c;有时需要将已经填写过的试卷还原为空白状态&#xff0c;以便重新使用或进行复印。通过使用特定的软件&#xff0c;你可以轻松地去除试卷上的手写内容或标记&#xff0c;恢复试卷的空…

【网络安全 | 虚拟机】VMware Workstation Pro下载安装使用教程(免费版)

未经许可,不得转载。 文章目录 下载安装使用(Centos)下载 进入官网页面,注册账户: https://profile.broadcom.com/web/registration注册后登录(用户名为邮箱),选择My Downloads: 如图选择: 如图选择: 如图选择: 如图选择:

嵌入式Linux C应用编程指南-进程、线程(速记版)

第九章 进程 9.1 进程与程序 9.1.1 main()函数由谁调用&#xff1f; C 语言程序总是从 main 函数开始执行&#xff0c;main()函数的原型是&#xff1a; int main(void) 或 int main(int argc, char *argv[])。 操作系统下的应用程序在运行 main()函数之前需要先执行一段引导代…

性能炸裂的数据可视化分析工具:DataEase!【送源码】

今天分享一款开源的数据可视化分析工具&#xff0c;帮助用户快速分析数据并洞察业务趋势&#xff0c;从而实现业务的改进与优化。支持丰富的数据源连接&#xff0c;能够通过拖拉拽方式快速制作图表&#xff0c;并可以方便地与他人分享。 技术栈 前端&#xff1a;Vue.js、Elemen…

【网络基础】探索 NAT 技术:IP 转换、NAPT、NAT穿越及代理服务器

文章目录 1. 前言2. IP 转换过程3. NAPT① 基本概念② 工作原理③ 优缺点④ 实际应用 4. 缺陷5. NAT 穿越① 概述② 示例 6. NAT 与 代理服务器① 代理服务器与NAT的区别&#xff1a;② 正向代理 / 反向代理 服务器 1. 前言 NAT&#xff08;网络地址转换&#xff09;是一种常见…

路由策略工具

1.产生背景 a.保证数据访问的安全性 b.提高链路带宽利用率 c.流量路径不优 2.解决方案: 解决方案一:路由策略:可通过修改路由条目(即对接收和发布的路由进行过滤)来控制流量可达性 解决方案二:流量过滤:可使用Traffic-Filter工具对数据直接进行过滤 3.路由策略工具 a.可利…

登录究竟有多少种花样?

写在最前面&#xff1a; 大家好&#xff0c;我是小....小白不黑&#xff0c;现在的app以及任何一个系统&#xff0c;都离不开登录。其中最常见的估计就是密码登录&#xff0c;二维码登录&#xff0c;第三方账号登录以及单点登录了。 现在&#xff0c;让我们来捋一捋&#xff…

【virtuoso】INV 原理图+前仿真 + 版图 + 后仿真

采用SMIC工艺&#xff0c;不同工艺版图窗口可能有差异 1. 原理图&前仿真 1.1 绘制原理图 PMOS: NMOS宽长比2&#xff1a;1 PMOS开启导通电阻大一点&#xff0c;这样设置&#xff0c;可以使得阈值电压是VDD/2 按 i&#xff0c;可以插入器件按p&#xff0c;可以放置端口 1.2…

AXIS接口教程

免责声明&#xff1a; 本文所提供的信息和内容仅供参考。作者对本文内容的准确性、完整性、及时性或适用性不作任何明示或暗示的保证。在任何情况下&#xff0c;作者不对因使用本文内容而导致的任何直接或间接损失承担责任&#xff0c;包括但不限于数据丢失、业务中断或其他经济…

Unity3D安卓游戏第三方SDK接入

PS&#xff1a;持续更新... 什么是SDK&#xff1f; SDK&#xff08;Software Development Kit&#xff0c;软件开发工具包&#xff09;是一个用于构建应用程序的工具集&#xff0c;包含开发特定软件的必要工具、库、文档和示例代码。SDK通常由软件或硬件厂商提供&#xff0c;帮…

MySQL高阶练习题1- 寻找面试候选人

目录 题目 准备数据 分析数据 实现代码 总结 题目 返回 所有面试候选人 的姓名 name 和邮件 mail 。当用户满足以下两个要求中的 任意一条 &#xff0c;其成为 面试候选人 : 该用户在 连续三场及更多 比赛中赢得 任意 奖牌。该用户在 三场及更多不同的 比赛中赢得 金牌&…

Linux——用户和权限

root用户&#xff08;超级管理员&#xff09; root用户拥有最大的系统操作权限&#xff0c;而普通用户在许多地方的权限是受限的。 ****************** 使用普通用户在根目录下创建文件夹 切换到root用户后&#xff0c;继续尝试 普通用户的权限&#xff0c;一般在其HOME目录…