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

算法32.0

525. 连续数组 - 力扣(LeetCode)


和为k的子数组变种

自己的理解:

想着把0元素变成-1  这样就不能用滑动窗口 因为有负数 单调性不敢保证

暴力解法:先遍历一遍数组 把0元素从0变为-1  然后遍历所有前缀和情况 返回前缀和是0的情况 并对比出最长子数组的长度

优化暴力解法:如何快速查找前缀和为0的情况? 

哈希表中存什么?  

之前做和为k的子数组的时候 我们哈希表统计的是前缀和和出现的次数  这里我们需要统计最长子数组的长度,并不关心前缀和出现的次数  

什么时候存入哈希表?

使用完之后,丢进哈希表    

如果有重复的<sum,i> 如何存?

不需要  题目要的是最长的 重复的i和sum

只保留前面的那一对<sum,i>  这个时候是最长的

默认的前缀和为0的情况如何存?

也是有个默认的前缀和为0  但是此时前缀和要存的是下标   

长度怎么算?

从i到j  就是i-j+1

但是实际长度不包含j点  所以就是i-j+1 -1 = i-j


细节:

审题:二进制数组就是元素仅为0或1的数组


别人的讲解:

直接统计0和1的数目

稍微转化一下  题目就会变得非常简单   

将所有的0修改成-1    在数组中,找出最长的子数组,使子数组中所有元素的和为0 

之前做过一道题:和为k的子数组    前缀和+哈希表   


下面是题目、效果图和代码: 

class Solution 
{public int findMaxLength(int[] nums) {Map<Integer,Integer>  hash = new HashMap<Integer,Integer>();hash.put(0,-1);//默认存在一个前缀和为0的情况int sum = 0,ret = 0;for(int i = 0 ;i<nums.length;i++){sum += (nums[i] == 0? -1 :1);//计算当前位置的前缀和    if(hash.containsKey(sum)) ret = Math.max(ret,i-hash.get(sum));else hash.put(sum,i);}return ret ; }
}
//xiyu251111&1#4*7

http://www.dtcms.com/a/597235.html

相关文章:

  • 基于SpringBoot的锦州红色旅游资源信息管理系统的设计与实现
  • 静态网站建设教程wordpress采集接口
  • 网上购物有哪些网站?如何加入广告联盟赚钱
  • 解决 elementui el-cascader组件懒加载时存在选中状态丢失的问题?
  • vue3封装alert 提示组件 仿element-plus
  • Day33-动态规划
  • 域名访问过程会不会影响网站访问商务网站设计
  • 模仿elementUI 中Carousel 走马灯卡片模式 type=“card“ 的自定义轮播组件 图片之间有宽度
  • 公司网站建设哪家正规wordpress 按别名
  • 网站建设安全架构网络购物平台哪个最好
  • 2048——逻辑思维与矩阵合并算法
  • Qt:判断一个sql语句是否是select语句
  • 【题解】洛谷 P2470 [SCOI2007] 压缩
  • Java1111 实现一个方法,获取属性值 返回name
  • 存储核心:EXT文件系统
  • 品牌型网站的特点站长工具seo查询5g5g
  • 量子信息中的QASM
  • 阿里巴巴做网站费用网站功能价格表
  • MongoDB 删除数据库
  • android studio 在终端指定 jdk 1.8 打包 release~ MacOS版
  • 【STM32】HDC2080温湿度计驱动
  • Highcharts 在 AMD 与 CommonJS 环境下的安装与配置指南
  • 阿里云编辑建设好的网站济南网络优化厂家
  • 如何给 MacOS 更新到指定版本系统
  • jEasyUI 合并单元格详解
  • AJAX学习 ---- axios体验
  • 电子商务网站开发基本流程建立链接
  • MySQL第五次作业(触发器,存储过程)
  • HORIBA MEXA-324M:双组分汽车尾气测量仪技术说明
  • C++进阶:(八)基于红黑树泛型封装实现 map 与 set 容器