news 2026/4/15 4:01:46

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

作者头像

张小明

前端开发工程师

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/4/4 17:08:48

Linux平台设备驱动

Linux内核使用总线来处理设备&#xff0c;总线连接了CPU与这些设备。有些总线足够智能&#xff0c;并内嵌了可发现性逻辑以枚举连接到总线上的设备。在引导阶段的初期&#xff0c;Linux内核会请求这些总线提供它们所枚举的设备以及这些设备正常工作所需的资源&#xff08;如中断…

作者头像 李华
网站建设 2026/4/5 3:04:38

初探 Mysql Docker

前言我在專案開發階段常使用 MySQL Docker&#xff0c;主要是好處&#xff0c;快速啟動、零安裝成本、版本切換&#xff0c;不污染本機系統(不喜歡本機裝一堆有的沒的&#xff0c;特別是有的只會用那麼一次)。而且如果在需要&#xff0c;任何時間、任何機器&#xff0c;都能還原…

作者头像 李华
网站建设 2026/4/8 0:49:37

大数据传输时代:如何选择高效可靠的数据传输工具?

在数据驱动决策的今天&#xff0c;大数据已成为企业核心资产。然而&#xff0c;随着数据量呈几何级数增长&#xff0c;海量数据的快速、安全、稳定迁移与同步&#xff0c;正成为众多企业数字化转型道路上的严峻挑战。传统的传输方式在TB甚至PB级的数据洪流面前&#xff0c;如同…

作者头像 李华
网站建设 2026/4/13 5:05:59

企业网盘私有化部署,构建安全高效的数据资产管理基石

在数字化转型浪潮中&#xff0c;企业数据资产的价值与日俱增&#xff0c;如何安全、高效地存储、管理与协作这些核心资产&#xff0c;成为每个组织必须面对的关键议题。近年来&#xff0c;越来越多的企业将目光投向网盘系统的私有化部署&#xff0c;这一模式正逐渐成为保障数据…

作者头像 李华
网站建设 2026/4/11 9:40:11

39、深入探究 Linux 中的睡眠与计时机制

深入探究 Linux 中的睡眠与计时机制 在 Linux 系统编程中,睡眠和计时是常见的操作,它们在很多场景下都发挥着重要作用。本文将详细介绍 Linux 中不同的睡眠和计时接口,包括它们的特点、使用方法以及适用场景。 1. 纳秒级睡眠:nanosleep() Linux 中, usleep() 函数已被…

作者头像 李华
网站建设 2026/4/8 1:15:56

31、Linux 动态内存管理全解析

Linux 动态内存管理全解析 1. 映射文件与内存管理接口概述 大多数地址空间包含少量映射文件,如程序可执行文件本身、C 语言及其他共享库和数据文件。可以查看 /proc/self/maps 或 pmap 程序的输出,了解进程中的映射文件示例。Linux 提供了一系列接口用于获取和释放内存…

作者头像 李华