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

力扣1477. 找两个和为目标值且不重叠的子数组

在这里插入图片描述
在这里插入图片描述
这一题观察数据范围和题目可以知道是应用到前缀和加哈希,正常的思路走即可,但关键点就在于如何实现数组的不重叠,我原想的方案是枚举出符合条件的子数组后,记录它的起始位置,新再枚举的子数组不能处于这个区间内,但这样就忽略了这个重复的数组可能要比之前的数组的长度小,如果不保存这个重叠的子数组,去更新最终两个子数组的长度和时一定会出错,而且子数组不定长,可能是在后面枚举的子数组比前面的要长些,总之不管怎样我们都无法实现对重叠的子数组的有效处理。
看题解后我才明白,解决重叠子数组的关键在于我们用一个dp【】表,每一个索引表示在该位置之前的最小的子数组的长度,这样就避免了对重复子数组的讨论,我们不需要关注两个子数组是否重叠,只需要把一个位置的前面的最小的子数组的长度统计出来即可,有可能在该位置之前有两个子数组是重叠的,但那又何妨,我们只需要判断它们谁长度最小,保存到dp表中即可,这样我们一边的枚举新的子数组,一边的更新新的子数组前面的子数组的长度的最小值这其实也是左维护右枚举的一种思想吧。

class Solution {
public:int sum[100005];
unordered_map<int,int> mp;int minSumOfLengths(vector<int>& arr, int target) {int leftmin[100005]; for(int i=0;i<=arr.size();i++){leftmin[i]=INT_MAX;}for(int i=0;i<arr.size();i++){sum[i+1]=sum[i]+arr[i];}mp[0]=0;//sum[j+1]-sum[i]=targetint ans=INT_MAX;for(int j=0;j<arr.size();j++){leftmin[j+1]=leftmin[j];if(mp.count(sum[j+1]-target)){//如果从哈希表中找到该位置之前存在一个子数组,使他满足条件int start=mp[sum[j+1]-target]+1;int len=j+1-start+1;if(start>0){if(leftmin[start-1]!=INT_MAX){ans=min(ans,leftmin[start-1]+len);}leftmin[j+1]=min(leftmin[j+1],len);} }mp[sum[j+1]]=j+1;}if(ans==INT_MAX){return -1;}elsereturn ans;}
};

时间复杂度O(n),涉及到了一些动态规划的思想但其实还算好理解的。

http://www.lryc.cn/news/573082.html

相关文章:

  • YOLO官方自带的数据集Dotav1,直接训练
  • Python爬虫实战:研究threading相关技术
  • 状态模式详解
  • Filecoin系列 - IPLD 技术分析
  • verilog HDLBits刷题“Module shift8”--模块 shift8---模块和向量
  • Python 的内置函数 hasattr
  • 中国设计 全球审美 | 安贝斯新产品发布会:以东方美学开辟控制台仿生智造新纪元
  • 【Koa系列】10min快速入门Koa
  • 蓝牙 5.0 新特性全解析:传输距离与速度提升的底层逻辑(面试宝典版)
  • 项目开发中途遇到困难的解决方案
  • 深入解析BERT:语言分类任务的革命性引擎
  • 创业知识概论
  • tkinter Entry(输入框)组件学习指南
  • 加密货币:比特币
  • 5.3 LED字符设备驱动
  • HarmonyOS 6 + 盘古大模型5.5
  • 【Python】Excel表格操作:ISBN转条形码
  • 西门子S7通信协议抓包分析应用
  • 【入门级-基础知识与编程环境:NOI以及相关活动的历史】
  • AI 产品的“嵌点”(Embedded Touchpoints)
  • python打卡day37
  • 智能体互联网新闻速递及深度分析【250620】
  • STM32[笔记]--开发环境的安装
  • 大数据Hadoop集群搭建
  • Linux (2)
  • Java常见八股-(6.算法+实施篇)
  • 知识蒸馏(Knowledge Distillation, KD)
  • gitea本地部署代码托管后仓库的新建与使用(配置好ssh密钥后仍然无法正常克隆仓库是什么原因)
  • 李宏毅 《生成式人工智能导论》| 第6讲-第8讲:大语言模型修炼史
  • 【大模型学习】项目练习:知乎文本生成器