【算法】前缀和算法——和为k的子数组之和

题解:和为k的子数组之和(前缀和算法)

目录

  • 1.题目
  • 2.题解思路
    • 2.1前缀和 + 哈希表,算法步骤:
    • 2.2细节如下:
    • 2.3参考代码:
  • 3.总结及思考

1.题目

题目链接:LINK
在这里插入图片描述

2.题解思路

暴力求解自然不用多说,时间复杂度是O(N^2)

可以用前缀和算法来进行求解,但是要做适当的转换。

2.1前缀和 + 哈希表,算法步骤:

首先,我们在遍历的时候要按照以i位置为结尾的子数组进行遍历。
在这里插入图片描述
第二,要与前缀和相结合
我们要求的是和为k的子数组,可以转换为谁前缀和为sum[i] - k
在这里插入图片描述

第三,我们计算出前缀和如果挨个遍历前缀和数组来找谁等于sum[i] - k的话时间复杂度还是O(N^2),因而我们要借助哈希表把每次找sum[i] - k值从O(N) 降到O(1)

在这里插入图片描述
在这里插入图片描述

2.2细节如下:

在这里插入图片描述

2.3参考代码:

class Solution {
public:int subarraySum(vector<int>& nums, int k) {unordered_map<int, int> hash; // 统计前缀和出现的次数hash[0] = 1;int sum = 0, ret = 0;for (auto x : nums) {sum += x;             // 计算当前位置的前缀和int target = sum - k; // 本次我们哈希表中要找的目标值if (hash.count(target))ret += hash[target]; // 统计个数hash[sum]++; // 将该次前缀和入到哈希表中,供下次使用}return ret;}
};

3.总结及思考

我感觉这个题目解法好难理解,虽然这个方法可行,但是还是有一些地方我感觉不太明白。

1.为什么不能用双指针(滑动窗口来做)?
因为这个题目数组 不具有单调性(有负数), 两个指针不能一直同向移动。不满足滑动窗口的使用前提条件。

2.为什么要将以i为开始的子数组转换为以i为结尾的子数组???
因为要 为下一步使用前缀和做铺垫

3.为什么要将前缀和数组用一个变量来替代?
因为 下一次所用的前缀和具有规律性,不用存着不需要的值

4.为什么要借助哈希表?
因为要 把每次找sum[i] - k的值的时间复杂度从O(N) --> O(1)


EOF

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

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

相关文章

【SQL】外连接 LEFT JOIN

目录 一.内连接与外连接 1.内连接&#xff08;inner join&#xff09; 2.外连接&#xff08;outer join&#xff09; 二.两表连接 1.我们先来试试看内连接&#xff1a; 2.我们再来试试外连接 三.单表外连接 四.总结 一.内连接与外连接 先得介绍内连接和外连接两个概念&…

第199题|关于函数的周期性问题|函数强化训练(六)|武忠祥老师每日一题 5月24日

解题思路&#xff1a;解这道题我们要用到下面这个结论 f(x)连续&#xff0c;以T为周期时&#xff0c;原函数以T为周期的充分必要条件是&#xff1a; (A) sin x显然是以π为周期的&#xff0c;我们可以看到并不等于0,根据结论&#xff0c;A的原函数显然不是周期函数。 (B) 的…

memmove使⽤和模拟实现

一&#xff1a;memmove的使⽤ 这是memmove在库里的定义&#xff0c;具体可在cplusplus.com查看 void * memmove ( void * destination, const void * source, size_t num ) • 和memcpy的差别就是memmove函数处理的源内存块和⽬标内存块是可以重叠的。 • 如果源空间和⽬标…

你以为的私域是真正的私域嘛??你的私域流量真的属于你嘛?

大家好 我是一个软件开发公司的产品经理 专注私域电商行业7年有余 您的私域流量是真正的属于你自己嘛&#xff1f; 私域的定义 私域的界定&#xff1a;一个互联网私有数据&#xff08;资产&#xff09;积蓄的载体。这个载体的数据权益私有&#xff0c;且具备用户规则制定权…

Mysql 备份恢复 mysqldump与xtrabackup备份

1.1 备份的原因 备份是数据安全的最后一道防线&#xff0c;对于任何数据丢失的场景&#xff0c;备份虽然不一定能恢复百分之百的数据 (取决于备份周期)&#xff0c;但至少能将损失降到最低。衡量备份恢复有两个重要的指标&#xff1a;恢复点目标(RPO) 和恢复时间目标(RTO)&…

数据库常用命令(1)

DML 1.添加数据&#xff08;insert into&#xff09; insert into 表名 values (值1&#xff0c;值2....); 表示成功运行&#xff1a; 2.修改数据&#xff08;update&#xff09; update 表名 set 字段名1值1&#xff0c;字段名2值2.....【where条件】 3.删除数据&#xff0…

元年科技数据智能研发部负责人张亚东受邀为第十三届中国PMO大会演讲嘉宾

全国PMO专业人士年度盛会 北京元年科技股份有限公司数据智能研发部负责人张亚东先生受邀为PMO评论主办的2024第十三届中国PMO大会演讲嘉宾&#xff0c;演讲议题为“大模型时代&#xff0c;AI创新型工具提升项目管理效率”。大会将于6月29-30日在北京举办&#xff0c;敬请关注&a…

jmeter之HTTP请求和查看结果树

一、HTTP请求作用&#xff1a; 可以发送post或get请求等请求可以向服务器发送参数或消息体数据可以进行文件上传 HTTP请求&#xff1a;是线程组内的取样器最常用的的一个原件 二、查看界面 添加一个HTTP请求&#xff1a;选择线程组–添加–取样器–HTTP请求 默认界面 名称和…

ThreadLocal为什么会导致内存泄漏?

问题引出&#xff1a; ThreadLocal是为了解决什么问题而产生的&#xff1f; ThreadLocal发生内存泄漏的根本原因是什么&#xff1f; 如何避免内存泄漏的发生&#xff1f;定义 为了解决多个线程同时操作程序中的同一个变量而导致的数据不一致性的问题。   假设现在有两个线程A…

如何获取一个城市或者一个区域的玫瑰风向图?

玫瑰风向图是一种直观展示风向和风速的图形工具&#xff0c;它在气象学、城市规划、农业等领域都有广泛的应用。那么&#xff0c;如何获取某个城市或某个区域的玫瑰风向图呢&#xff1f; 首先&#xff0c;我们可以借助互联网资源获取玫瑰风向图。现代网络技术发达&#xff0c;…

前端 防抖和节流

在前端开发中&#xff0c;防抖&#xff08;Debounce&#xff09;和节流&#xff08;Throttle&#xff09;是两种常用的性能优化技术&#xff0c;尤其在处理频繁触发的事件时显得尤为重要。无论是在用户输入、窗口调整大小&#xff0c;还是滚动事件中&#xff0c;这两种技术都可…

3D 生成重建011-LucidDreamer 优化SDS过平滑结果的一种探索

3D 生成重建011-LucidDreamer 优化SDS过平滑结果的一种探索 文章目录 0论文工作1论文方法2 效果 0论文工作 文本到3D生成的最新进展标志着生成模型的一个重要里程碑&#xff0c;为在各种现实场景中创建富有想象力的3D资产打开了新的可能性。虽然最近在文本到3D生成方面的进展…

自建公式,VBA在Excel中解一元一次方程

自建公式,VBA在Excel中解一元一次方程 文章目录 前言一、运行效果图二、操作思路三、代码1.去除方程中未知数,将未知数转为“*0”2.计算方程中常数3.计算方程中未知数的系数一,先将未知数替换成“*1”4.计算方程中未知数的系数二5.计算方程得数前言 小学必考内容:一元一次…

掌握Python基本语法的终极指南【基本语法部分】

一、基本语法部分 1.简单数据类型 1.1字符串类型及操作 字符串访问&#xff1a; 1.索引访问 mystr"Hello world" #索引访问 print(mystr[0]) #H print(mystr[-1]) #d print(mystr[-7]) #o print(mystr[6]) #w 2.切片访问 [头下标&#xff1a;尾下标] &#x…

齐护K210系列教程(三十二)_在线模型训练

在线模型训练 概念理解准备工作1 采集图像1.1 图像要求1.2 使用K210采集图片 2 标注图像3 打包数据集4 上传数据4.1创建项目4.1.1图像分类创建项目4.1.2图像检测创建项目 4.2上传数据4.2.1分类检测上传数据4.2.2图像检测上传数据 5 训练模型6 部署模型以及测试7 测试效果7.1图像…

leetcode 152. 乘积最大子数组

. - 力扣&#xff08;LeetCode&#xff09; 给你一个整数数组 nums &#xff0c;请你找出数组中乘积最大的非空连续 子数组 &#xff08;该子数组中至少包含一个数字&#xff09;&#xff0c;并返回该子数组所对应的乘积。 测试用例的答案是一个 32-位 整数。 示例 1: 输入…

MongoDB关系处理:优化数据管理、提升性能的最佳实践

MongoDB 是一种 NoSQL 数据库&#xff0c;它使用文档模型来存储数据&#xff0c;这与关系型数据库&#xff08;RDBMS&#xff09;有显著不同。本文将详细介绍 MongoDB 中的关系处理&#xff0c;包括基本语法、命令、示例、应用场景、注意事项和总结。 基本语法 文档和集合 M…

30.静态代码分析工具clang-tidy

文章目录 基本介绍安装clang-tidy使用clang-tidy配置文件和格式文件配置文件格式文件使用配置文件和格式化文件 在代码中设置排除clang-tidy检测reference 欢迎访问个人网络日志&#x1f339;&#x1f339;知行空间&#x1f339;&#x1f339; 基本介绍 clang-tidy 是一个基于…

JDBC总结

目录 JDBC(java database connection) JDBC连接数据库步骤: 1. 在项目中添加jar文件,如图所示 2.加载驱动类 向数据库中插入数据代码示例: 第一种: 第二种: 查询操作 : 第一种: 第二种: JDBC(java database connection) java数据库连接.api(应用程序编程接口) ,可…

Java中的垃圾回收机制

在Java编程语言中&#xff0c;垃圾回收&#xff08;Garbage Collection, GC&#xff09;机制是内存管理的一个核心部分。它的主要目标是自动释放那些不再被程序使用的对象所占用的内存空间&#xff0c;从而防止内存泄漏&#xff0c;并确保程序的稳定运行。下面&#xff0c;我将…