Leetcode_C++之525. Contiguous Array(连续子数组)
创始人
2024-02-29 09:38:12
0

题目名称

Contiguous Array

题目描述

Given a binary array nums, return the maximum length of a contiguous subarray with an equal number of 0 and 1.

Example 1:
Input: nums = [0,1]
Output: 2
Explanation: [0, 1] is the longest contiguous subarray with an equal number of 0 and 1.

Example 2:
Input: nums = [0,1,0]
Output: 2
Explanation: [0, 1] (or [1, 0]) is a longest contiguous subarray with equal number of 0 and 1.

Constraints:
1 <= nums.length <= 10e5
nums[i] is either 0 or 1.

初试思路

见注释和视频b站

初试代码

// 我的代码
class Solution {
public:int findMaxLength(vector& nums) {// 遍历从下标i到下标j的子串中符合条件的最长的子串,返回其长度// 即count0[i to j] == count1[i to j] // => count0[0 to j] - count0[0 to i] == count1[0 to j] - count1[0 to i]// => count0[0 to j] - count1[0 to j] == count0[0 to i] - count1[0 to i]// => diffcount[j] == diffcount[i]// 遍历找到符合条件的最大的 i to j的长度int MaxLen = 0; //最大子串长度int MaxJ = 0;   //最大的j的值// diffcount数组存放nums中从下标0到每个下标的“0的个数与1的个数差”,其长度为nums.size()+1,原因见初始化vector diffcount(nums.size()+1); // -1 0 1 2 ... nums.size()-1diffcount[dindex(-1)] = 0; //下标0之前的下标“-1”对应的元素置零0// 初始化diffcount数组, 如果nums[i]==0,则将diffcount[dindex(i)]的值置为前一个元素+1//                      如果nums[i]==1,则将diffcount[dindex(i)]的值置为前一个元素-1for(int i=0; i maxj(nums.size()*2+1); // -nums.size ... 0 ... nums.size()for(int i=-nums.size(); i MaxLen) //if(MaxJ-i+1 > MaxLen) //会使得Maxlen = 1而这明显是错的MaxLen = MaxJ-i+1;    }return MaxLen;   }int dindex(int i){return i+1;}int mindex(int i, int size){return i+size;}};

推荐思路

1、一个数组即可,存放当前0的个数和1的个数的差
2、因为数组是稀疏的,好多用不到,所以可以用哈希表

推荐代码

// 别人的代码1
class Solution {
public:int findMaxLength(vector& nums) {vector arr(2*nums.size() + 1, INT_MIN);arr[nums.size()] = -1;int maxLen = 0, sum = 0;for (int i = 0; i < nums.size(); i++) {sum += (nums[i] == 0 ? -1 : 1);if (arr[sum + nums.size()] >= -1)  maxLen = max(maxLen, i - arr[sum + nums.size()]);else  arr[sum + nums.size()] = i; }return maxLen;}
};
//别人的代码2
class Solution {
public:int findMaxLength(vector& nums) {int sum=0, maxLen=0;unordered_map seen{{0, -1}};for(int i=0; i

相关内容

热门资讯

保存时出现了1个错误,导致这篇... 当保存文章时出现错误时,可以通过以下步骤解决问题:查看错误信息:查看错误提示信息可以帮助我们了解具体...
汇川伺服电机位置控制模式参数配... 1. 基本控制参数设置 1)设置位置控制模式   2)绝对值位置线性模...
不能访问光猫的的管理页面 光猫是现代家庭宽带网络的重要组成部分,它可以提供高速稳定的网络连接。但是,有时候我们会遇到不能访问光...
表格中数据未显示 当表格中的数据未显示时,可能是由于以下几个原因导致的:HTML代码问题:检查表格的HTML代码是否正...
本地主机上的图像未显示 问题描述:在本地主机上显示图像时,图像未能正常显示。解决方法:以下是一些可能的解决方法,具体取决于问...
表格列调整大小出现问题 问题描述:表格列调整大小出现问题,无法正常调整列宽。解决方法:检查表格的布局方式是否正确。确保表格使...
不一致的条件格式 要解决不一致的条件格式问题,可以按照以下步骤进行:确定条件格式的规则:首先,需要明确条件格式的规则是...
Android|无法访问或保存... 这个问题可能是由于权限设置不正确导致的。您需要在应用程序清单文件中添加以下代码来请求适当的权限:此外...
【NI Multisim 14...   目录 序言 一、工具栏 🍊1.“标准”工具栏 🍊 2.视图工具...
银河麒麟V10SP1高级服务器... 银河麒麟高级服务器操作系统简介: 银河麒麟高级服务器操作系统V10是针对企业级关键业务...