首页 > 试题广场 >

连续数组的长度

[编程题]连续数组的长度
  • 热度指数:414 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
给定一个仅由0,1构成的整数数组nums,请返回0和1个数相同的最长子数组的长度。

示例1

输入

[0,1]

输出

2

说明

数组中0,1的个数相同且子数组最长为原数组 
示例2

输入

[0,0,1,0,0,0,1,1]

输出

6

说明

从第3个数到第8个数构成的子数组中0,1的个数相同且该子数组最长 
publicintfindMaxLength (ArrayList<Integer> nums) {
  // write code here
  // 存储最大长度
  intmax =0;
  // 存储0,1差
  int[] data =newint[nums.size()];
  Map<Integer, Integer> map =newHashMap<>();
  map.put(0, -1);
  for(inti=0;i<nums.size();i++){
    intval = nums.get(i) ==0?1: -1;
    data[i] = i==0?val:data[i-1]+val;
    // 记录水平高度的起始下标或计算当前水平高度到前一水平高度的距离
    if(!map.containsKey(data[i])) {
      map.put(data[i],i);
    }else{
      // 记录最大距离差
      max = Math.max(max, i-map.get(data[i]));
    }
  }
  returnmax;
}
发表于 2022-07-12 16:32:20 回复(0)

问题信息

难度:
1条回答 1008浏览

热门推荐

通过挑战的用户

查看代码