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

滑动窗口——将x减到0的最小操作数

题目:

这个题如果我们直接去思考方法是很困难的,因为我们不知道下一步是在数组的左还是右操作才能使其最小。正难则反,思考一下,无论是怎么样的,最终这个数组都会分成三个部分左中右,而左右的组合就是我们进行的所有操作(极端情况下左或右长度为0),但不管怎样,都分成了连续的几块。左右之和若为x,那么中间的数组和就是sum-x(假设数组之和为sum),我们要找左右长度和最短,那么只要找中间数组最长即可。

具体思路:

定义同向双指针,然后“进窗口”,判断(sum是否>target,此处的sum是滑动窗口内之和,target是上面的sum-x),如果满足条件,则出窗口,然后更新结果,判断此时的sum是否=target,符合条件,记录长度,然后一次次取最大值

 

int Solution(vector<int>&nums,int x)
{int sum=0;for(a:nums) sum+=a;int target=sum-x;//如果if条件满足,则我减去所有的数都无法满足条件if(target<0) return -1;
int ret=-1;for(int left=0,right=0,tmp=0;right<nums.size();right++){//进窗口tmp+=nums[right];//判断,出窗口while(tmp>target)tmp-=nums[left++];//判断,更新结果if(tmp==target)ret=max(ret,right-left+1);}if(ret==-1)return ret;//走遍数组也没找到符合条件else return nums.size()-ret;
}

http://www.xdnf.cn/news/394759.html

相关文章:

  • Python中的标识、相等性与别名:深入理解对象引用机制
  • Gartner 《2025大数据管理规划指南》学习心得
  • 【安装配置教程】ubuntu安装配置Kodbox
  • 【RP2350】香瓜树莓派RP2350之搭建开发环境(windows)
  • AI日报 - 2024年05月12日
  • redis数据结构-05 (LPUSH、RPUSH、LPOP、RPOP)
  • 第二十二节:图像金字塔-拉普拉斯金字塔
  • 深入浅出:Spring Boot 中 RestTemplate 的完整使用指南
  • AI Agent(9):企业应用场景
  • springboot3+vue3融合项目实战-大事件文章管理系统-更新用户头像
  • MySQL(8)什么是主键和外键?
  • Ubuntu 22虚拟机【网络故障】快速解决指南
  • Linux:44线程互斥lesson32
  • 【言语】刷题1
  • 手机当电脑播放器 soundwire
  • Python异常处理全解析:从基础到高级应用实战
  • 《大模型微调实战:Llama 3.0全参数优化指南》
  • js前端分片传输大文件+mongoose后端解析
  • 大数据基础——Ubuntu 安装
  • 洛谷题目:P1673 [USACO05FEB] Part Acquisition S 题解(本题简)
  • 基于zernike 拟合生成包裹训练数据-可自定义拟合的项数
  • Vue Router全局拦截
  • 《Vuejs 设计与实现》第 4 章(响应式系统)( 下 )
  • ES 面试题系列「二」
  • C++ asio网络编程(4)异步读写操作及注意事项
  • (十二)Java枚举类深度解析:从基础到高级应用
  • C++八股——函数对象
  • 工具篇-扣子空间MCP,一键做游戏,一键成曲
  • C/C++实践(五)C++内存管理:从基础到高阶的系统性实现指南
  • 《从零构建一个简易的IOC容器,理解Spring的核心思想》