LeetCode-笔记-525. 连续数组

6月份第三天前缀和了

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

示例 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,且该子串有相同的数目的0和1!

我们思路第一步可以把数组的0变为-1

此时就可以运用前缀和了!

请看设f[i]表示i下标的值,x[i]表示前i-1个前缀和加上f[i];我们把x[i]的值充当键值,下标i充当value,及make_pair(x[i],i)存于哈希表中。于是有:
x[i]=x[i−1]+f[i];x[i]=x[i-1]+f[i]; x[i]=x[i−1]+f[i];
如果发现本次计算的x[i]值在哈希表里有,就意味着在i-x[i]每项累加和为零,即有相同的-1与1,即有相同的0和1;l表示最长数组长度,于是有
l=max(i−x[i],l)l=max(i-x[i],l) l=max(i−x[i],l)
在这里注意几点,make_pair(x[i],i)存的是第一次出现想x[i]值的下标其次有人可能有疑问,中间若出现了此值,后面也出现了此值,后面与中间不也可以形成子数组吗?``是的没错,但后面也可以与第一次形成子数组啊,肯定比这个长

边界第一个0应当赋给下标-1,因为数组长度为0时,值也为0;

C++实现

class Solution {public:int findMaxLength(vector<int>& nums) {vector<int> num=nums;int len=num.size();if(len<2) return 0;int x=0;int l=0;map<int,int> sum;sum[0]=-1;for(int i=0;i<len;++i){if(num[i]==0) num[i]=-1;x=x+num[i];if(sum.count(x)){if(i-sum[x]>=2) l=max(i-sum[x],l);}else{sum[x]=i;}}return l;}
};

LeetCode-笔记-525. 连续数组相关推荐

  1. LeetCode 525 连续数组/剑指 Offer II 011. 0 和 1 个数相同的子数组

    题目链接:525. 连续数组 思路:前缀和+哈希表 由于「0 和 1 的数量相同」等价于「1 的数量减去 0 的数量等于 0」,我们可以将数组中的 0 视作 -1,则原问题转换成「求最长的连续子数组, ...

  2. LeetCode 525. 连续数组(前缀和+哈希)

    1. 题目 给定一个二进制数组, 找到含有相同数量的 0 和 1 的最长连续子数组(的长度). 示例 1: 输入: [0,1] 输出: 2 说明: [0, 1] 是具有相同数量0和1的最长连续子数组. ...

  3. leetcode 525. 连续数组

    给定一个二进制数组 nums , 找到含有相同数量的 0 和 1 的最长连续子数组,并返回该子数组的长度. 示例 1: 输入: nums = [0,1] 输出: 2 说明: [0, 1] 是具有相同数 ...

  4. leetcode 525. Contiguous Array | 525. 连续数组(Java)

    题目 https://leetcode.com/problems/contiguous-array/ 题解 想到了这个题,不过和本题没什么关系,仅仅是想到了而已: https://leetcode.c ...

  5. 文巾解题 525. 连续数组

    1 题目描述 2 解题思路 方便起见,我们将0~1数组看成-1~1数组. 什么时候子数组中-1和1的数量相同呢?那就是这个子数组里面的数字之和为0,此时所有的-1和1两两抵消了. 那么我们就想到前缀和 ...

  6. 【LeetCode笔记】215. 数组中的第K个最大元素(Java、快排、堆排、并发快排)

    文章目录 题目描述 思路 & 代码 快排 基于 Fork / Join 的并发快排 针对 topK 的快排优化 堆排 基本堆排 结合题目的堆排 二刷 题目描述 大名鼎鼎的TOP K,主要考察排 ...

  7. LeetCode笔记:原地修改数组

    LeetCode笔记:原地修改数组 自大学开始,我便陆陆续续的学习一些 算法和数据结构 方面的内容,同时也开始在一些平台刷题,也会参加一些大大小小的算法竞赛.但是平时刷题缺少目的性.系统性,最终导致算 ...

  8. LeetCode笔记:Biweekly Contest 83

    LeetCode笔记:Biweekly Contest 83 0. 小结 1. 题目一 1. 解题思路 2. 代码实现 2. 题目二 1. 解题思路 2. 代码实现 3. 题目三 1. 解题思路 2. ...

  9. LeetCode笔记:Biweekly Contest 85

    LeetCode笔记:Biweekly Contest 85 1. 题目一 1. 解题思路 2. 代码实现 2. 题目二 1. 解题思路 2. 代码实现 3. 题目三 1. 解题思路 2. 代码实现 ...

最新文章

  1. sql删除重复的数据保留一条_leetcode题库-sql练习精讲系列--九、删除重复
  2. DotNetTextBoxV3.0在线编辑器控件Ver3.4.2 Open Source开源版
  3. 【CV】基于阈值处理的图像分割算法!
  4. poj 2513 Colored Sticks( 字典树哈希+ 欧拉回路 + 并查集)
  5. 为什么存png还有白色底_PNG的算法原理
  6. Java中的异常栈轨迹和异常链
  7. 别再用 Visio 了!试试这个比它快 10 倍的画图工具不香吗?
  8. DSP技术是利用计算机或,什么是dsp技术?dsp技术有哪些应用?
  9. 准确率(Accuracy) 精确率(Precision) 召回率(Recall)和F1-Measure(精确率和召回率的调和平均值)
  10. 结构设计——常用机械设计软件对比
  11. 自定义敏感词检测器_使用转移学习创建自己的自定义对象检测器
  12. 软件工程——软科中国大学专业排名
  13. 轩小陌的Python笔记-Pandas 高级数据处理
  14. 数据湖统一存储在 OPPO 的实践
  15. 银行统一支付平台(介绍、架构)
  16. Python:peewee常用操作CRUD
  17. 【内网安全-隧道技术】SMB、ICMP、DNS隧道、SSH协议
  18. 今日头条各种套路玩法
  19. HTML学习内容的总结
  20. hihoCoder1054—滑动解锁(深搜)

热门文章

  1. 快速下载 | TBtools 软件最新版本与相关数据库文件
  2. MPB:甘肃省科学院祝英等-药用植物地下茎内生真菌的分离纯化及鉴定
  3. ISME:宏基因组探究美洲河狸粪便微生物
  4. 西游记里河水让人怀孕的秘密:是寄生虫!我往河里放了寄生虫!
  5. R语言进行dataframe数据内连接(Inner join):使用R原生方法、data.table、dplyr等方案
  6. R语言为dataframe添加新的数据列(横向拼接、Appending columns,Unioning columns):使用R原生方法、data.table、dplyr等方案
  7. R语言使用fmsb包、gradar包可视化雷达图(radar chart、蜘蛛图spider plot)、ggpubr包可视化点图、GGally包可视化多变量的平行坐标轴图
  8. matplotlib可视化基本散点图、在图像指定区域绘制方框并进行自定义色彩填充(Draw Rectangle filled with color)
  9. R语言随机森林模型:计算随机森林模型的特征重要度(feature importance)并可视化特征重要度、使用少数重要特征拟合随机森林模型(比较所有特征模型和重要特征模型在测试集上的表现差异)
  10. pandas使用组合条件筛选、过滤数据行