前缀和+哈希表——525. 连续数组

news2025/4/14 14:30:14

在这里插入图片描述

文章目录

    • ⛏1. 题目
    • 🗡2. 算法原理
      • ⚔解法一:暴力枚举
      • ⚔解法二:前缀和+哈希表
    • ⚒3. 代码实现

⛏1. 题目

题目链接:525. 连续数组 - 力扣(LeetCode)

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

示例 1:

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

示例 2:

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

提示:

  • 1 <= nums.length <= 105
  • nums[i] 不是 0 就是 1

🗡2. 算法原理

⚔解法一:暴力枚举

直接枚举所有子数组,判断是否符合要求,这不做示例。

复杂度较高,大概率超时

⚔解法二:前缀和+哈希表

这题的意思是让我们找出一个最长连续的区域,让这个区域内的01数量相等,如果我们直接统计这个01的数目的话,还是比较困难的。我们可以换个思路,反正这里就01两个数字,我们不妨将0看作-1,那么这题就转换成了在这个数组中,找出一段连续的区域,让这个区域内的和0

这样转换之后,就和这题类似:前缀和+哈希表——560. 和为 K 的子数组,这是这里找的是和为0的最长子数组,那么这题就可以用前缀和+哈希表

不了解的可以点击链接看一下这题:
在这里插入图片描述

i为数组中的任意位置,用sum[i]表示[0,i]区间内的所有元素和,找到在[0,i-1]位置第一次出现sum[i]的位置即可
在这里插入图片描述

细节还是较多:

  • 哈希表中存什么?
    这里要的是最长的子数组,所以我们要的是下标,所以哈希表里面要建立前缀和与数组下标的映射关系.
  • 存入哈希表的时机:当这个下标对应的前缀和使用完毕之后,再丢入哈希表。
  • 如果有重复的<sum,i>,我们选取的是靠左侧的下标,因为我们选取的是最长子数组,越靠近左侧,这个子数组就越长
    image-20231126131159227
  • 默认前缀和为0时,应该去[-1,0]这个区间去找,所以当我们用hash[0] = -1来表示默认前缀和为0
  • 长度计算,直接看下图,清晰明了:
    image-20231126132631763

时间复杂度为O(n)

⚒3. 代码实现

class Solution {
public:
    int findMaxLength(vector<int>& nums)
    {
        unordered_map<int,int> hash;
        hash[0] = -1;   //默认前缀和为0的情况

        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.coloradmin.cn/o/1254792.html

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

相关文章

超全整理,银行测试-银行项目贷款业务详细,一篇概全...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 银行测试&#xf…

cuda magma 构建 使用cmake构建的步骤记录

这不是群论代数软件&#xff0c;而是cuda 矩阵计算软件 1. 生成其他精度的源代码 1.1 复制编辑 make.inc cp make.inc-examples/make.inc.openblas ./make.inc 并修改其中的定义&#xff1a; OPENBLASDIR ? /opt/OpenBLAS 这需要实现安装openblas到此处。文件夹解构&…

Linux 网络通信

(一)套接字Socket概念 Socket 中文意思是“插座”&#xff0c;在 Linux 环境下&#xff0c;用于表示进程 x 间网络通信的特殊文件 类型。本质为内核借助缓冲区形成的伪文件。 既然是文件&#xff0c;那么理所当然的&#xff0c;我们可以使用文件描述符引用套接字。Linux 系统…

Royal TSX v6.0.1

Royal TSX是一款基于插件的软件&#xff0c;适用于Windows系统&#xff0c;可以用于远程连接和管理服务器。它支持多种连接类型&#xff0c;如RDP、VNC、基于SSH连接的终端&#xff0c;SFTP/FTP/SCP或基于Web的连接管理。 在安装Royal TSX后&#xff0c;需要进行一些基础配置&…

【新手解答2】深入探索 C 语言:一些常见概念的解析

C语言的相关问题解答 写在最前面问题1变量名是否有可能与变量重名&#xff1f;变量名和变量的关系变量名与变量是否会"重名"举例说明结论 变量则是一个地址不变&#xff0c;值时刻在变的“具体数字”变量的地址和值变量名与数据类型具体化示例结论 问题2关于你给我的…

11.8事务

一.Spring实现事务的两种方式 1.通过代码的方式手动实现事务. 2.通过注解的方式实现声明式事务. 二. 1.mysql事务 2. 手动实现事务 3.注解实现事务 使用注解Transactional,可以写在类上或方法上,如果异常,就自动回滚,正常则自动提交. 注意: 如果在代码中添加了try,catch捕…

408—电子笔记分享

一、笔记下载 链接&#xff1a;https://pan.baidu.com/s/1bFz8IX6EkFMWTfY9ozvVpg?pwddeng 提取码&#xff1a;deng b站视频&#xff1a;408-计算机网络-笔记分享_哔哩哔哩_bilibili 包含了408四门科目&#xff08;数据结构、操作系统、计算机组成原理、计算机网络&#xff09…

灭火器二维码巡检卡制作教程

每个消防器材生成独立二维码&#xff0c;取代传统纸质巡检卡&#xff0c;微信扫码巡检&#xff0c;巡检记录汇总后台&#xff0c;随时登录后台查看导出数据&#xff0c;管理人员绑定凡尔码小程序即可随时了解消防巡检完成情况。 生成灭火器巡检码流程图&#xff1a; 1、开通后…

【智能算法】基于黄金正弦和混沌映射思想的改进减法优化器算法

减法优化器&#xff08;Subtraction-Average-Based Optimizer&#xff0c;SABO&#xff09;是2023年刚出的智能优化算法。目前知网中文期刊基本搜不到&#xff0c;并且可以遇见未来一年文章也很少。SABO算法原理简单&#xff0c;算上初始化粒子&#xff0c;总共不超过6个公式。…

解密 sqli靶场第一关:一步一步学习 SQL 注入技术

目录 一、判断是否存在注入点 二、构造类似?id1 --的语句 三、判断数据表中的列数 四、使用union联合查询 五、使用group_concat()函数 六、爆出数据库中的表名 七、爆出users表中的列名 八、爆出users表中的数据 &#x1f308;嗨&#xff01;我是Filotimo__&#x1f308;。很…

阶梯排列硬币

题意&#xff1a; 你总共有 n 枚硬币&#xff0c;并计划将它们按阶梯状排列。对于一个由 k 行组成的阶梯&#xff0c;其第 i 行必须正好有 i 枚硬币。阶梯的最后一行 可能 是不完整的。 给你一个数字 n &#xff0c;计算并返回可形成 完整阶梯行 的总行数。 示例 1&#xff…

python 笔记 根据用户轨迹+基站位置,估计基站轨迹+RSRP

1 问题描述 已知用户实际的轨迹&#xff0c;和基站的位置&#xff0c;能不能得到用户所连接的基站&#xff0c;以及基站的信号强度RSRP&#xff1f; 1.1 几个假设 这里我们做几个假设&#xff1a; 每个用户有80%的概率连接最近的基站&#xff0c;有20%的概率选择其他的基站连…

【SAS Planet 下载地图瓦片】

SAS Planet是一位俄罗斯爱好者创建的的开源应用&#xff0c;该应用可以浏览与下载主流网络地图&#xff0c;包括Google地图、Google地球、Bing地图、Esri 地图、Yandex地图等&#xff0c;支持100多图源。 安装包下载地址&#xff1a;https://www.sasgis.org/download/ github…

用队列和栈分别实现栈和队列

用队列实现栈 题目解读 本题的要求是要用两个队列来实现一个先进后出的栈&#xff0c;并且要有以下功能&#xff1a; 1.将元素压入栈中 2.移除栈顶元素并且返回他 3.返回栈顶元素 4.判断栈是否为空 题目构思和代码实现 我们首先要做的就是将实现队列的代码导入该题&#xff…

【深度学习】如何找到最优学习率

经过了大量炼丹的同学都知道&#xff0c;超参数是一个非常玄乎的东西&#xff0c;比如batch size&#xff0c;学习率等&#xff0c;这些东西的设定并没有什么规律和原因&#xff0c;论文中设定的超参数一般都是靠经验决定的。但是超参数往往又特别重要&#xff0c;比如学习率&a…

扩散模型实战(十二):使用调度器DDIM反转来优化图像编辑

推荐阅读列表&#xff1a; 扩散模型实战&#xff08;一&#xff09;&#xff1a;基本原理介绍 扩散模型实战&#xff08;二&#xff09;&#xff1a;扩散模型的发展 扩散模型实战&#xff08;三&#xff09;&#xff1a;扩散模型的应用 扩散模型实战&#xff08;四&#xff…

python之pyqt专栏4-代码控制部件

通过前面的学习&#xff0c;我们已经回创建新的pyqt项目、对项目结构有了了解、也了解Qt Designer设计UI界面并 把"xx.ui"转换为“xxx.py”。 pyqt模块与类 pyqt6 由模块组成&#xff0c;而模块里面又有很多的类 在pyqt官网Modules — PyQt Documentation v6.6.0页面…

函数的防抖与节流

一、函数防抖 &#xff08;一&#xff09;防抖的理解 防抖就是将所有的触发都取消&#xff0c;在规定的时间结束过后才会执行最后一次&#xff0c;也就是说连续快速的触发只会执行最后一次结果。 也可以理解为游戏里的回城按钮&#xff0c;每点一下就会重新刷新回城进度&…

SSM 框架整合

1 整合配置 1.1 流程 1.2 Spring 整合 MyBatis 1.3 Spring 整合 SpringMVC 1.4 配置代码 JdbcConfig.java public class JdbcConfig {Value("${jdbc.driver}")private String driver;Value("${jdbc.url}")private String url;Value("${jdbc.usern…

【挑战业余一周拿证】CSDN官方课程目录

一、亚马逊云科技简介 二、在云中计算 三、全球基础设施和可靠性 四、联网 五、存储和数据库 六、安全性 七、监控和分析 八、定价和支持 九、迁移和创新 十、云之旅 关注订阅号 CSDN 官方中文视频&#xff08;免费&#xff09;&#xff1a;点击进入 一、亚马逊云科…