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

力扣原题《长度最小的子数组》,有序版(理想版最大值查找)纯手搓,已验证,方差版(考虑元素离散,大值周围全是小值的情况)在下一篇

理想版,大值周围是大值

给定一个含有 n 个正整数的数组和一个正整数 target 。
找出该数组中满足其总和大于等于 target 的长度最小的 子数组 [numsl, numsl+1, …, numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0 。
示例 1:
输入:target = 7, nums = [2,3,1,2,4,3]
输出:2
解释:子数组 [4,3] 是该条件下的长度最小的子数组。
示例 2:
输入:target = 4, nums = [1,4,4]
输出:1
示例 3:
输入:target = 11, nums = [1,1,1,1,1,1,1,1]
输出:0
提示:
1 <= target <= 109
1 <= nums.length <= 105
1 <= nums[i] <= 104

我的答案

classMinSubArray{public:MinSubArray(){}intminSubArrayLen(inttarget,vector<int>&nums){//先排序//std::sort(nums.begin(),nums.end());vector<int>::iterator maxPos=max_element(nums.begin(),nums.end());//双指针vector<int>::iterator left=nums.end();vector<int>::iterator right=nums.end();if(maxPos!=nums.begin()&&maxPos-1>=nums.begin()){left=maxPos-1;}if(maxPos+1<nums.end()){right=maxPos+1;}if(*(maxPos)>=target){return1;}else{intsum=*(maxPos);boolisTopLeft=false,isTopRight=false;//如果到头了,就不要重复加了while(true){inttag=0;if(left!=nums.end()&&right!=nums.end())//左右都存在{if(!isTopLeft&&*left>*right){sum+=*left;if(left!=nums.begin()){left--;tag=1;}else{isTopLeft=true;}}elseif(!isTopRight){sum+=*right;if(right<nums.end()){right++;tag=2;}else{isTopRight=true;}}}elseif(!isTopLeft&&left!=nums.end())//只有左边存在{sum+=*left;if(left!=nums.begin()){left--;tag=3;}else{isTopLeft=true;}}elseif(!isTopRight&&right!=nums.end())//只有右边存在{sum+=*right;if(right<nums.end()){right++;tag=4;}else{isTopRight=true;}}if(sum>=target){switch(tag)//避免重复加一个{case1:case3:if(left!=nums.begin()||!isTopLeft){left++;}break;case2:case4:if(right==nums.end()||!isTopRight){right--;}break;default:break;}break;}if((left==nums.end()&&right==nums.end())||(isTopLeft&&isTopRight)||(left==nums.end()&&isTopRight)||(right==nums.end()&&isTopLeft)){break;}}if(sum>=target){returnright-left;}return0;}return0;}};intmain(){vector<vector<int>>nums;vector<int>target;nums.push_back({2,3,1,2,4,3});nums.push_back({1,4,4});nums.push_back({1,1,1,1,1,1,1,1});nums.push_back({1,2,3,4,5});nums.push_back({12,28,83,4,25,26,25,2,25,25,25,12});target.push_back(7);target.push_back(4);target.push_back(11);target.push_back(15);target.push_back(213);MinSubArray minSubArray;for(vector<vector<int>>::iterator iter=nums.begin();iter!=nums.end();iter++){std::cout<<"最小子数组长度为:"<<minSubArray.minSubArrayLen(target[iter-nums.begin()],*(iter))<<std::endl;}}
http://www.jsqmd.com/news/541990/

相关文章:

  • OpenClaw日志分析进阶:百川2-13B-4bits量化模型自动错误诊断
  • 手把手教你用STM32F103C8T6的编码器接口模式,轻松搞定JGB37-520电机测速(附CubeMX配置)
  • 2026年评价高的废热蒸发器/三效蒸发器公司推荐 - 品牌宣传支持者
  • 从若依权限系统到uni-app:我是如何把企业级权限控制搬进小程序的
  • RWKV7-1.5B-g1a参数详解教程:temperature/top_p/max_new_tokens调优指南
  • Firefox用户福音:免破解!一键安装HackBar 2.1.3旧版本完整教程
  • Co-Training在文本分类中的5个应用技巧与常见误区
  • 生物隔离器应用白皮书医药防护技术指南:分装隔离器/单工位手套箱/双工位手套箱/定制手套箱/实验手套箱/屏蔽手套箱/选择指南 - 优质品牌商家
  • 从ChatGPT到专属业务专家:手把手教你用SFT低成本打造行业AI Agent(附金融客服案例代码)
  • 别再被‘百万像素镜头’忽悠了!搞懂相机与镜头的真实匹配逻辑(附换算公式)
  • 在Ubuntu 22.04上搞定CanFestival主站:从源码下载到SocketCAN配置的保姆级教程
  • Python并发性能拐点已至:基于Intel Xeon Platinum实测的无锁配置黄金组合(仅限v3.13.0a4+定制内核)
  • 从三对角到五对角:追赶法在MATLAB/Python中的性能对比与选型指南
  • WebPShop插件全面解析:从安装到高级应用的图像处理解决方案
  • Python C扩展安全审计指南:从PyPI恶意包到内存溢出,5步完成企业级加固
  • 实战指南:基于Cursor与快马平台,构建企业级数据可视化看板
  • 单细胞通讯分析实战:巧用liftCellChat破解多样本细胞类型不一致难题
  • OpenClaw+GLM-4.7-Flash:自动化代码审查助手
  • 如何用n8n-nodes-puppeteer实现浏览器自动化?掌握这4个核心应用场景
  • ollama-QwQ-32B多模态扩展:OpenClaw处理图片与文本混合任务
  • 保姆级教程:手把手教你理解DDR内存的ZQ校准与Training(以LPDDR5为例)
  • Video2X终极指南:用AI无损放大视频分辨率的完整教程
  • 3个维度打造高效Markdown预览解决方案:从安装到定制的全流程指南
  • 2026年生产工艺制冷冷冻机组推荐指南:控制柜空调/机床空调/机房空调/机柜空调/水冷式冷水机/水冷式螺杆机组/选择指南 - 优质品牌商家
  • OpenClaw排错指南:Qwen3.5-9B接口连接失败的7种解决方法
  • OpenClaw浏览器自动化:GLM-4.7-Flash驱动的智能网页操作
  • 深入对比:Qwen3-VL应用中图片传输的Base64编码与MinIO对象存储方案选型指南
  • 【2026数据工程师必学】:Polars 2.0 + DuckDB联邦清洗流水线,替代Spark小集群的5个关键转折点
  • 赛灵思Virtex UltraScale+选型指南:为什么XCVU9P在5G基站和雷达项目中比HBM型号更吃香?
  • NTP配置避坑指南:华三/华为/思科设备时间同步差异对比