【数据结构-前缀哈希】力扣525. 连续数组

news/2024/9/11 4:13:57/ 标签: leetcode, 数据结构, 哈希算法

给定一个二进制数组 nums , 找到含有相同数量的 0 和 1 的最长连续子数组,并返回该子数组的长度。

示例 1:
输入: nums = [0,1]
输出: 2
说明: [0, 1] 是具有相同数量 0 和 1 的最长连续子数组。

示例 2:
输入: nums = [0,1,0]
输出: 2
说明: [0, 1] (或 [1, 0]) 是具有相同数量0和1的最长连续子数组。

在这里插入图片描述

class Solution {
public:int findMaxLength(vector<int>& nums) {for(int &num : nums){if(num == 0){num = -1;}}   int sum = 0,res = 0;unordered_map<int, int> group;for(int i = 0;i < nums.size();i++){sum += nums[i];if(sum == 0){res = i + 1;}if(group.contains(sum)){res = max(res, i - group[sum]);}else{group[sum] = i;}}return res;}
};

时间复杂度:O(n),其中 n 是数组 nums 的长度。需要遍历数组一次。
空间复杂度:O(n)

将nums中的0全部替换成-1,然后定义一个哈希表group,键用来储存sum,值用来储存对应的前缀和的下标。当前计算前缀和sum的时候,如果前面有相同的前缀和,说明中间这个子段和为0,也就说明0和1的数量相等,所以这个时候i - group[sum]来求这个子段的长度。然后不断比较求的0和1数量相等的最大子段长度。


http://www.ppmy.cn/news/1507480.html

相关文章

C++常用的设计模式和内存管理

C++常用的设计模式和内存管理 1. 设计模式 设计模式是在软件工程中解决常见问题的一种标准化方法。它们为特定情境下的问题提供了一种经过验证的解决方案,这些模式可以帮助提高代码的可读性、可维护性和可复用性。C++作为一种强大的面向对象语言,非常适合应用设计模式来构建…

(限时免费)震惊!流落人间的haproxy宝典被找到了!一切玄妙尽在此处!

目录 haproxy七层代理详解一、负载均衡1.1 什么是负载均衡1.2 为什么使用负载均衡1.3 负载均衡类型1.3.1 硬件负载1.3.2 四层负载1.3.3 七层负载1.3.4 四层与七层的区别 二、haproxy介绍2.1 haproxy简介2.2 haproxy特性 三、haproxy详细部署3.1 实验所用的环境3.2 软件安装3.3 …

【Python】网络编程

计算机网络的介绍 计算机的发展经历了以下几个阶段&#xff1a; 阶段时间物理器件第一阶段1946年到20世纪50年代后期电子管第二阶段20世纪50年代后期到20世纪60年代中期晶体管第三阶段20世纪60年代中期到20世纪70年代初期中小规模集成电路第四阶段20世纪70年代初期至今大规模…

【机器学习】卷积神经网络简介

&#x1f308;个人主页: 鑫宝Code &#x1f525;热门专栏: 闲话杂谈&#xff5c; 炫酷HTML | JavaScript基础 ​&#x1f4ab;个人格言: "如无必要&#xff0c;勿增实体" 文章目录 卷积神经网络简介1. 引言2. CNN的基本概念2.1 什么是卷积神经网络2.2 CNN与传统…

摘下自闭症帽子,点亮新生活:康复故事分享

在生活的舞台上&#xff0c;有一群特殊的孩子&#xff0c;他们曾被自闭症的阴影所笼罩&#xff0c;但通过不懈的努力和坚持&#xff0c;最终成功摘下了这顶沉重的帽子&#xff0c;迎来了充满希望和光明的新生活。今天&#xff0c;让我们走进他们的世界&#xff0c;分享那些感人…

自学-网络安全

自学网络安全是一个既具挑战性又充满机遇的过程。网络安全是一个庞大的领域&#xff0c;涵盖了网络架构、操作系统安全、程序安全、数据安全、社交工程学、密码学等多个方面。为了系统地学习网络安全&#xff0c;以下是一份详细的自学指南&#xff0c;旨在帮助初学者从零开始&a…

C++ primer plus 第17 章 输入、输出和文件:文件输入和输出03:文件模式:二进制文件

系列文章目录 17.4.5 文件模式 程序清单17.18 append.cpp 程序清单17.19 binary.cpp 文章目录 系列文章目录17.4.5 文件模式程序清单17.18 append.cpp程序清单17.19 binary.cpp17.4.5 文件模式1.追加文件来看一个在文件尾追加数据的程序。程序清单17.18 append.cpp2.二进制文…

VC 与 VS(visual studio) 的对应版本

VC 与 VS 对应版本的关系&#xff1a; VC9&#xff1a;对应的是 Visual Studio 2008 版本。在这个版本中&#xff0c;开发环境提供了一系列的新特性和改进&#xff0c;为开发者提供了更高效的编程体验。例如&#xff0c;增强了对 C 标准的支持&#xff0c;优化了调试工具等。 …

Android顶部标题栏自定义,添加按钮

1. 先写一个标题栏的layout, 放在工程的res/layout下&#xff0c;如下: <?xml version"1.0" encoding"utf-8"?> <RelativeLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"match_par…

EF8 学习过程中的问题和解决方案

一、varchar类型字段如果为null 无法使用contains来判断是否包含字符串 1. 有问题的代码&#xff1a; contractList _dbcontext.contractHeads.Where(u > u.code.Contains(queryStr) || u.name.Contains(queryStr) || u.companyName.Contains(queryStr) || u.customerNa…

npm install报错npm ERR! Maximum call stack size exceeded

npm install报错npm ERR! Maximum call stack size exceeded 报错1 npm ERR! Maximum call stack size exceeded报错2 npm ERR! code ETIMEDOUT npm ERR! errno ETIMEDOUT npm ERR! network request to https://registry.npmjs.org/babel%2fplugin-syntax-optional-catch-bi…

我一周的周任务 提前完成啦

学习目标&#xff1a; 提示&#xff1a;web前端工程师 例如&#xff1a; 每天将解决问题的思路以及方法 发布博客 手敲思路 学习内容&#xff1a; 提示&#xff1a;vue3的多图上传移除 思路&#xff1a;其实很简单&#xff0c;将移除事件api返回的fileList 切割前缀 再将原…

Spring MVC原理:掌握Web开发的核心技术

引言 在现代Web开发领域&#xff0c;Spring框架无疑占据着举足轻重的地位。其中&#xff0c;Spring MVC作为Spring框架中的一个重要组成部分&#xff0c;为构建响应用户请求、处理业务逻辑以及渲染视图的Web应用程序提供了强大的支持。本文将深入探讨Spring MVC的工作原理及其…

spingboot mongoDB实现文件的上传、下载、预览

pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4.0.0…

Spring及相关框架的重要的问题

Java框架 问题一&#xff1a;Spring框架中的单例bean是线程安全的吗&#xff1f; 看下图&#xff0c;不能被修改的成员变量就是无状态的类&#xff0c;无状态的类没有线程安全问题&#xff0c;所以在开发中尽量避免可修改的成员变量。 回答&#xff1a;不是线程安全的&#xf…

力扣:1019. 链表中的下一个更大节点

1019. 链表中的下一个更大节点 单调栈问题&#xff0c;用单调栈建立递减的序列。 这个题略微麻烦的点在于处理链表而非数组&#xff0c;我们可以遍历链表把数组存起来&#xff0c;再用单调栈维护计算。 /*** Definition for singly-linked list.* struct ListNode {* in…

Onenet服务器创建产品和设备

Onenet服务器创建产品和设备 (1)浏览器搜索 Onenet, 或者打开这个网址 OneNET - 中国移动物联网开放平台 (10086.cn) (2)登录注册, 密码特殊符号是 (3)进入此网址, 设备管理页面 设备列表 - OneNET物联网平台 (10086.cn) (4)点击产品开发,创建产品 (5)其他行业 (6)设备接…

Docker 部署 SkyWalking 的指南

Docker 部署 SkyWalking 的指南 SkyWalking 是一款开源的应用性能监控工具&#xff0c;特别适用于分布式系统。通过 Docker 部署 SkyWalking&#xff0c;可以简化安装和配置过程。本文将详细介绍如何使用 Docker 部署 SkyWalking。 环境准备 在开始之前&#xff0c;请确保你…

springboot + springcloud + Google pubsub+ firebase

1.pom依赖 <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-gcp-starter</artifactId><version>1.2.6.RELEASE</version></dependency><dependency><groupId>org.springframe…

Unity3D MD5 签名算法

Unity3D MD5 签名算法实现流程。 MD5 签名算法 之前在和运营对接支付订单模块时&#xff0c;需要向他们的服务器发送查单请求&#xff0c;其中有个参数是 sign&#xff0c;要求把订单的相关信息&#xff0c;转换成 MD5 的形式。 简要流程&#xff1a; 先对参数列表按照 ASC…