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

leetcode 525. 连续数组

这段代码实现了用前缀和和哈希表寻找0和1数量相同的最长子数组。核心思路是将0视为-1,然后计算前缀和,利用哈希表记录每个前缀和第一次出现的位置,当遇到相同前缀和时计算长度并更新最大值。

关键步骤:

  1. 初始化哈希表,记录前缀和0的初始位置为-1
  2. 遍历数组,遇到1时前缀和加1,遇到0时前缀和减1
  3. 检查当前前缀和是否已存在哈希表中:
    • 若存在,计算当前位置与首次出现位置的距离,更新最大长度
    • 若不存在,记录当前前缀和的首次出现位置
  4. 返回最大长度

示例输入[0,1,0,1]的输出为4,对应整个数组。时间复杂度O(n),空间复杂度O(n)。

#include <iostream>
#include <vector>
#include <unordered_map>
using namespace std;int findMaxLength(vector<int>& nums) {int maxLen = 0;int counter = 0;// 哈希表记录前缀和第一次出现的位置unordered_map<int, int> hashmap;// 初始化前缀和为0的位置为-1hashmap[0] = -1;for (int i = 0; i < nums.size(); i++) {// 遇到1加1,遇到0减1if (nums[i] == 1) {counter++;} else {counter--;}// 如果当前前缀和已经存在,计算当前位置到首次出现位置的长度if (hashmap.find(counter) != hashmap.end()) {int len = i - hashmap[counter];if (len > maxLen) {maxLen = len;}} else {// 记录前缀和首次出现的位置hashmap[counter] = i;}}return maxLen;
}int main() {vector<int> nums = {0, 1, 0, 1};cout << "最长子数组长度: " << findMaxLength(nums) << endl;return 0;
}
http://www.xdnf.cn/news/657649.html

相关文章:

  • CertiK联创顾荣辉做客纽交所,剖析Bybit与Coinbase事件暴露的Web3安全新挑战
  • 原子操作(C++)
  • 深度体验:海螺 AI,开启智能创作新时代
  • liunx、ubantu22.04安装neo4j数据库并设置开机自启
  • AI工程师跑路了-SpringAi来帮忙
  • 学习路之PHP--easyswoole安装入门
  • LINUX安装运行jeelowcode前端项目
  • SC89171的介绍和使用
  • 炫云云渲染,构筑虚实交融的3D数字新视界
  • AI的“软肋”:架构设计与业务分析的壁垒
  • OpenCV CUDA模块图像过滤------创建一个行方向的一维积分(Sum)滤波器函数createRowSumFilter()
  • 爬虫IP代理效率优化:策略解析与实战案例
  • Neo4j(三) - 使用Java操作Neo4j详解
  • 第12次05: 用户中心-用户基本信息
  • 如何用ChatGPT提升学术长文质量
  • Golang Gin框架基础与实践指南
  • 【学习笔记】GitLab 下载安装与配置
  • 算力服务器的应用场景都有哪些
  • 学习python day8
  • 超临界机组协调控制系统建模项目开发笔记
  • git 删除某个远程库的分支
  • 【Redis】第1节|Redis服务搭建
  • 【freertos-kernel】queue(创建)
  • 企业网络综合实训
  • Zephyr OS: periodic_adv_rsp代码架构和实现
  • GPT-4o 风格提示词案例大全(持续更新 ing...)
  • 小白成长之路-计算机网络(二)
  • 前后端分离项目之新增编辑功能
  • 4800H 低负载黑屏或者蓝屏
  • JS逆向【抖查查】逆向分析 | sign | secret签名验证