当前位置: 首页 > news >正文

leetcode 525 连续数组

一、题目描述

二、解题思路

整体思路

将数组中所有的0换成-1,找到含相同数量的0和1的最长连续子数组就可以转换为求和为0的子数组。枚举出以i位置为结尾的和为0的子数组,采用前缀和+哈希表的方法来解决这个问题。思路类似leetcode560和为K的子数组leetcode974和可被K整除的子数组

具体思路

要找出以i位置为结尾的和为0的子数组,即找出[0,i-1]内以和为sum-0,即和为sum的子数组,如图所示:

有以下细节问题需要注意:

(1)哈希表unordered_map<int,int>hash的键是前缀和,值是下标

(2)前缀和加入哈希表的时机:

在计算i位置之前,哈希表里面只保存[0,i-1]区间的前缀和,所以,在完成if判断后,在将i位置的前缀和加入哈希表

(3)子数组的长度为i-hash[sum],而不是i-hash[sum]+1,因为前缀和包含了右端点;

(4)如果整个向量的前缀和为0,为了避免出界,我们需要初始化hash[0]=-1

(5)由于是求最长子数组的长度,所以如果键sum已经存在,则无需再更新hash[sum]的值,因为越靠左边,子数组长度越长;如果键sum不存在,则使得hash[sum]=i;

三、代码实现

时间复杂度:T(n)=O(n)

空间复杂度:S(n)=O(n)

class Solution {
public:int findMaxLength(vector<int>& nums) {//前缀和+哈希表unordered_map<int,int> hash;hash[0]=-1;int sum=0,ret=0;for(int i=0;i!=nums.size();i++){sum+=nums[i]==0?-1:1;if(hash.count(sum)) ret=max(ret,i-hash[sum]);else hash[sum]=i;}return ret;}
};

http://www.xdnf.cn/news/1379737.html

相关文章:

  • 【PostgreSQL内核学习:通过 ExprState 提升哈希聚合与子计划执行效率(二)】
  • MySQL 与 ClickHouse 深度对比:架构、性能与场景选择指南
  • 【第三方网站运行环境测试:服务器配置(如Nginx/Apache)的WEB安全测试重点】
  • R 语言 ComplexUpset 包实战:替代 Venn 图的高级集合可视化方案
  • 基于mac的智能语音处理与应用开发-环境部署
  • HTML应用指南:利用POST请求获取全国中国工商银行网点位置信息
  • 【mysql】SQL HAVING子句详解:分组过滤的正确姿势
  • TUN模式端口冲突 启动失败如何解决?
  • 点评项目(Redis中间件)第二部分Redis基础
  • PostgreSQL 流复制与逻辑复制性能优化与故障切换实战经验分享
  • Java集合操作:Apache Commons Collections4启示录
  • 【Web】JWT(JSON Web Token)技术详解
  • 客户案例 | 柳钢集团×甄知科技,燕千云ITSM打造智能服务新生态
  • Mac 开发环境与配置操作速查表
  • 基于django的梧桐山水智慧旅游平台设计与开发(代码+数据库+LW)
  • 破译心智密码:神经科学如何为下一代自然语言处理绘制语义理解的蓝图
  • 磁力计校准矩阵求解方法解析
  • 从体验到系统工程丨上手评测国内首款 AI 电商 App
  • 图书管理系统练习项目源码-前后端分离-【Java版】
  • Python Imaging Library (PIL) 全面指南:PIL基础入门-图像滤波与处理技术
  • week5-[一维数组]去重
  • 机器学习基本概述
  • STM32F407与LAN8720A以太网通信实现指南
  • GraphRAG技术深度解析:重新定义智能问答的未来
  • 【赵渝强老师】MySQL数据库的多实例环境
  • Redis 连接数爆炸:连接池配置错误踩坑记录
  • Electron 简介:Node.js 桌面开发的起点
  • 华为云OBS+HMS+EMRonEC2+HiveSparkFlink+GaussDB
  • QT 概述(背景介绍、搭建开发环境、Qt Creator、程序、项目文件解析、编程注意事项)
  • 隐语Kuscia正式发布 1.0.0 版本,实现支持 Hive 数据源,支持 envoy 日志进行异常分析等功能