news 2026/7/17 17:50:01

连续数组(哈希+前缀和)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
连续数组(哈希+前缀和)

这道题可以利用前缀和 + 哈希表来解决。

1.将 0 视为 -1

题目要求找“0 和 1 数目相等”的最长子数组。
如果把数组中的0当作-1,那就等价于:

找到一个子数组,使得这个子数组的元素和为 0。

2.使用哈希表记录前缀和第一次出现的位置

prefixSum为从数组开始到当前的前缀和。

unordered_map<int, int> index存储:

<前缀和,第一次出现的下标>

为什么存第一次出现的位置?
因为前缀和越早出现,后续遇到相同前缀和时形成的子数组就越长。

3.遍历数组时更新前缀和

扫描数组:

  • 遇到1:prefixSum += 1

  • 遇到0:prefixSum -= 1

每一步都检查:

如果当前前缀和 prefixSum 曾经出现过:

说明:

两次出现 prefixSum 之间的子数组和为 0
→ 0 和 1 的数量相等

于是可以计算当前长度并更新答案。

如果此前没有出现过 prefixSum:

记录当前下标(只记录第一次出现的位置)。

4.初始化 index[0] = -1

为了处理从下标0开始就满足条件的情况。

通过将 0 当作 -1,我们把问题转化为寻找“和为 0 的最长子数组”。
使用哈希表记录每个前缀和第一次出现的位置。当同一个前缀和再次出现时,说明中间的子数组和为 0,即 0 和 1 数量相等,从而可以更新最大长度。

class Solution { public: int findMaxLength(vector<int>& nums) { int cnt=0; unordered_map<int,int> index; index[cnt]=-1; int maxLen=0; for(int i=0;i<nums.size();i++){ if(nums[i]==1) cnt++; else cnt--; if(index.count(cnt)){ int curLen=i-index[cnt]; maxLen=maxLen>curLen?maxLen:curLen; } else index[cnt]=i; } return maxLen; } };
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/16 21:35:32

ubuntu通过公网Ubuntu服务器远程桌面连接私网IPUbuntu

私网Ubuntu主机-------Ubuntu服务器---------私网IP Ubuntu主机第一部分&#xff1a;公网 Ubuntu 服务器部署 frps&#xff08;服务端&#xff09;步骤 1&#xff1a;安装依赖并下载 frp# 切换root&#xff08;避免频繁sudo&#xff09; sudo -i # 安装wget&#xff08;若未安装…

作者头像 李华
网站建设 2026/7/15 12:52:01

Unity学习笔记(十九)GUI控件(三)

窗口普通窗口private Rect dragWindow new Rect(400, 400, 200, 150);第一个参数 id是窗口的唯一ID&#xff0c;不要和别的窗口重复委托参数 是用于绘制窗口的函数 传入即可GUI.Window(1, new Rect(100, 100, 200, 150),DrawWindow,"测试窗口");id 除了区分不同窗口…

作者头像 李华
网站建设 2026/7/17 0:50:25

IPA 深度混淆是什么意思?分析其与普通混淆的区别

在一些安全讨论里&#xff0c;“IPA 深度混淆”这个词经常被提到&#xff0c;但真正落到工程实践时&#xff0c;不同团队对它的理解差异很大。 有人把它等同于“混淆得更狠一点”&#xff0c;也有人认为这是某种“高强度黑科技”。 从我接触过的项目来看&#xff0c;IPA 深度混…

作者头像 李华
网站建设 2026/7/17 5:17:39

33、Linux 内存管理全解析

Linux 内存管理全解析 1. 内存统计信息获取 在 Linux 系统中,我们可以通过调用 mallinfo() 函数来获取内存分配的统计信息。这个函数会以 mallinfo 结构体的形式返回统计数据,结构体是通过值传递,而非指针传递。 mallinfo 结构体的定义在 <malloc.h> 头文件…

作者头像 李华
网站建设 2026/7/16 20:02:57

5.回溯算法

装载问题&#xff1a;问题描述&#xff1a;有一批共n个集装箱要装上载重量为c的轮船&#xff0c;其中集装箱i重量为wi&#xff0c;集装箱装载问题要求确定在不超过轮船载重量的前提下&#xff0c;将尽可能多的集装箱装上轮船&#xff0c;且集装箱的重量之和最大回溯算法实现&am…

作者头像 李华
网站建设 2026/7/13 21:16:43

嵌入式模组温控策略

一、为什么需要温控策略? 嵌入式模组(尤其是通信模组如4G/5G、Cat.1等)在运行时会发热,主要热源包括: 基带处理器:信号编解码、协议处理 射频功率放大器:信号发射时功耗最大 电源管理芯片 环境温度影响:工业环境可达-40C ~ +85C 温度过高会导致:性能降频、通信中…

作者头像 李华