算法:525.连续数组

news2024/10/25 21:15:31

题目

链接:leetcode

在这里插入图片描述

思路分析(前缀和)

首先介绍一个小技巧
在处理二进制数组的时候,因为数组里面只有0和1,我们可以将所有的0变成-1
这个时候1和-1之间就可以产生很多抵消,有利于处理数组。

在该题中,要寻找一个连续子数组,使得其中含有相同数量的0和1,0变成-1之后,也就是,含有相同数量的-1和1,
那么这个区间的和就是0

分析到这里,相信读者可以联想到前面的一道题
传送门:和为K的子数组

在这道题目里面就是和为0的子数组
也就是我们需要再 [0 , i - 1] 这个区间里面寻找一个最短的前缀和等于 sum - 0

处理的大体思路类似,依旧采用前缀和+哈希表来处理。

细节:

  1. 哈希表里面存什么?
    哈希表里面存前缀和和这个前缀和最早出现的下标
  2. 什么时候插入哈希表
    当然是先查找,再插入
  3. 对于[0 , i ]区间正好有相同个0和1如何处理
    也就是这个时候我们需要特殊区处理hash[0],hash[0]的下标固定给-1,来应对整个区间正好有相同个0和1的情况
  4. 如何求最长连续子数组的长度
    直接用当前位置的下标 - 前缀和对应的下标 (千万不要再加1,我们不需要包括前缀和的最后一个元素)
  5. 遇到重复的前缀和怎么处理
    遇到重复的前缀和,只记录前缀和第一次出现时的下标,才能,满足最长连续子数组

代码

int findMaxLength(vector<int>& nums) {
        //类似和为K的最长子数组--和为0的最长子数组
        unordered_map<int,int> hash;//sum 和 下标
        hash[0] = -1;
        int sum = 0,len = 0;

        for(int i = 0;i < nums.size();++i)
        {
            if(nums[i] == 0) nums[i] = -1;//0和1不好处理,换成1和-1非常好处理
            sum += nums[i];
            if(hash.count(sum))
            len = max(len, i - hash[sum]);
            if(!hash.count(sum)) hash[sum] = i;//统计最早出现的
        }

        return len;
    }

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

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

相关文章

2.2.1 绘制Canvas路径 - 绘制线条

文章目录 1. 绘制线条2. 绘制具有不同结束线帽的线条3. 绘制向阳花图形 今天我们要一起探讨的是如何使用HTML5的Canvas元素来绘制各种图形。Canvas提供了一个强大的图形绘制API&#xff0c;使我们能够在网页上绘制出各种复杂的图形和动画。接下来&#xff0c;我将通过几个实战示…

从Naive RAG到Agentic RAG:基于Milvus构建Agentic RAG

检索增强生成&#xff08;Retrieval-Augmented Generation, RAG&#xff09;作为应用大模型落地的方案之一&#xff0c;通过让 LLM 获取上下文最新数据来解决 LLM 的局限性。典型的应用案例是基于公司特定的文档和知识库开发的聊天机器人&#xff0c;为公司内部人员快速检索内部…

如何在数仓中处理缓慢变化维度(SCD)

在数据仓库中&#xff0c;处理缓慢变化维度&#xff08;SCD&#xff0c;Slowly Changing Dimension&#xff09;是一个非常常见且重要的问题。为了保证数据的完整性和准确性&#xff0c;我们通常会采取不同的策略来处理维度表中的数据变化。SCD的核心解决方案是通过不同类型的历…

Run the FPGA VI 选项的作用

Run the FPGA VI 选项的作用是决定当主机 VI 运行时&#xff0c;FPGA VI 是否会自动运行。 具体作用&#xff1a; 勾选 “Run the FPGA VI”&#xff1a; 当主机 VI 执行时&#xff0c;如果 FPGA VI 没有正在运行&#xff0c;系统将自动启动并运行该 FPGA VI。 这可以确保 FPG…

使用Hugging Face中的BERT进行标题分类

使用Hugging Face中的BERT进行标题分类 前言相关介绍出处基本原理优点缺点 前提条件实验环境BERT进行标题分类准备数据集读取数据集划分数据集设置相关参数创建自己DataSet对象计算准确率定义预训练模型定义优化器训练模型保存模型测试模型 参考文献 前言 由于本人水平有限&…

视频文案提取

视频文案提取 通义听悟 &#x1f3c6;优点 自动提取音视频关键词、总结、提炼视频大纲、中英双字幕可以识别不同声音进行文案区分&#xff0c;还支持直接AI改写提取的文案旁边还有AI助手帮助你回答问题和对知识举一反三相关视频介绍&#x1f449;原地封神&#xff01;录音、…

拆解学习【反激-PD-氮化镓】(一)

小米67W桌面快充插座&#xff1a; 反激基本拓扑&#xff1a; 商用场景下&#xff0c;这个拓扑进行了如下优化&#xff1a; 1.Q22换成了氮化镓开关管&#xff0c;当然需要适配的能驱动氮化镓的控制芯片 2.D21二极管换成了MOS管。 3.由于是AC220V输入&#xff0c;设计了整流桥…

在Centos中安装、配置与使用atop监控工具

目录 前言1. atop工具的安装1.1 atop简介1.2 atop的安装步骤 2. 安装并配置netatop模块2.1 安装内核开发包2.2 安装所需依赖2.3 下载netatop2.4 解压并安装netatop2.5 启动netatop 3. atop的配置与使用3.1 配置监控周期与日志保留时间3.2 设置定时任务生成日志3.3 启动与查看at…

鸿蒙开发之ArkUI 界面篇 三十四 容器组件Tabs 自定义TabBar

如果需要修改Tabs的图标和文字之间的距离我们该怎么办呢&#xff1f;好在tabBar是联合类型&#xff0c;提供了自定义tabBar&#xff0c;这里就可以显示特殊图标或者是文字图片&#xff0c;如下图&#xff1a; 这里定义了myBuilder的函数&#xff0c;用了 来修饰&#xff0c;没有…

联合查询(详细篇)

实际开发中往往数据来自不同的表 所以需要多表联合查询 多表查询是对多张表的数据取笛卡尔积 笛卡尔积 什么是笛卡尔积呢&#xff1f; 简单来说 笛卡尔积是两个表的乘积 结果集中的每一行都是第一个表的每一行与第二个表的每一行的组合 简单理解&#xff1a; 假设有两个表…

复位电路的亚稳态

复位导致亚稳态的概念&#xff1a; 同步电路中&#xff0c;输入数据需要与时钟满足setup time和hold time才能进行数据的正常传输&#xff08;数据在这个时间段内必须保持不变&#xff1a;1不能变为0&#xff0c;0也不能变为1&#xff09;&#xff0c;防止亚稳态&#xff1b; …

FPGA实现PCIE采集电脑端视频缩放后转千兆UDP网络输出,基于XDMA+PHY芯片架构,提供3套工程源码和技术支持

目录 1、前言工程概述免责声明 2、相关方案推荐我已有的PCIE方案我这里已有的以太网方案本博已有的FPGA图像缩放方案 3、PCIE基础知识扫描4、工程详细设计方案工程设计原理框图电脑端视频PCIE视频采集QT上位机XDMA配置及使用XDMA中断模块FDMA图像缓存纯Verilog图像缩放模块详解…

前端接口报500如何解决 | 发生的原因以及处理步骤

接口500&#xff0c;通常指的是服务器内部错误&#xff08;Internal Server Error&#xff09;&#xff0c;是HTTP协议中的一个标准状态码。当服务器遇到无法处理的错误时&#xff0c;会返回这个状态码。这种错误可能涉及到服务器配置、服务器上的应用程序、服务器资源、数据库…

【畅捷通-注册安全分析报告】

前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 暴力破解密码&#xff0c;造成用户信息泄露短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨大&#xff0c;造成亏损无底洞…

图说谭教授的“Δy=dy”是误人子弟的概念性错误。

黄小宁 可建立如图所示的局部坐标系。图中曲线Δydy余项不是关于dx的一次函数&#xff0c;而切线dyydx是关于dx的一次函数。草图形象直观地显示曲线Δy不切线dy。 所以谭教授书中的“Δydy余项dy”是误人子弟的概念性错误。数学家王元说&#xff1a;搞错概念脑子会变成一团浆糊…

离岗睡岗预警系统 值班室离岗识别系统Python 结合 OpenCV 库

在众多工作场景中&#xff0c;存在着一些特殊岗位&#xff0c;这些岗位对于人员的专注度和警觉性有着极高的要求。然而&#xff0c;离岗睡岗现象却时有发生&#xff0c;给工作的正常开展和安全保障带来了严重的威胁。本文将深入探讨特殊岗位离岗睡岗的危害&#xff0c;以及如何…

解决方案:AttributeError: Can only use .str accessor with string values!

文章目录 一、现象二、解决方案 一、现象 最近在用Pandas库处理日期数据的时候&#xff0c;有时候想截取后两个数字&#xff0c;却截取不了&#xff0c;时间久了&#xff0c;会有些遗忘&#xff0c;去找大模型提问找答案&#xff0c;于是做个笔记记录&#xff0c;帮助后面遇见…

docker,docker-desktop,docker-compose download

docker docker-compose download 百度网盘获取离线包链接release-notes 参考dockerdocker-composewlspowershell

程序猿成长之路之设计模式篇——创建型设计模式——抽象工厂模式

设计模式开篇之作&#xff0c;简单介绍一下抽象工厂设计模式 前言 试想一下&#xff0c;国内有两个工厂&#xff0c;工厂1和工厂2&#xff0c;这两个不同牌子的工厂生产同样类型的商品&#xff0c;但是商品的价格和数量不一致&#xff0c;这时候我们要对其进行设计&#xff0c…

Centos基线自动化检查脚本

此脚本是一个用于检查Linux系统安全配置的Bash脚本。它通过多项安全标准对系统进行评估&#xff0c;主要检查以下内容&#xff1a; IP地址获取&#xff1a;脚本首先获取主机的IP地址&#xff0c;确保其以10.115开头。 密码策略检查&#xff1a; 检查最小密码长度&#xff08;P…