当前位置: 首页 > 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.dtcms.com/a/183889.html

相关文章:

  • 自然语言处理NLP中的连续词袋(Continuous bag of words,CBOW)方法、优势、作用和程序举例
  • 嵌入式硬件篇---IIC
  • Linux:43线程封装与互斥lesson31
  • upload-labs靶场通关详解:第五关
  • RAII是什么?
  • 9.1.领域驱动设计
  • Spring Boot项目(Vue3+ElementPlus+Axios+MyBatisPlus+Spring Boot前后端分离)
  • 《操作系统真象还原》第十四章(1)——文件系统概念、创建文件系统
  • 如何租用服务器并通过ssh连接远程服务器终端
  • AugmentCode 非常昂贵的新定价
  • stm32测频率占空比最好的方案
  • python 写一个工作 简单 番茄钟
  • Apache Ranger 2.2.0 编译
  • 补补表面粗糙度的相关知识(一)
  • 【网络安全】——大端序(Big-Endian)​​和​​小端序(Little-Endian)
  • MyBatis进阶:掌握动态SQL,实现灵活的数据库查询
  • Oracle Goldengate并行复制进程状态查看没有transaction信息
  • SAP学习笔记 - 开发08 - Eclipse连接到 BTP Cockpit实例
  • 03.three官方示例+编辑器+AI快速学习webgl_animation_multiple
  • k8s中ingress-nginx介绍
  • 【C/C++】跟我一起学_C++同步机制效率对比与优化策略
  • MySql(基础)
  • Go语言标识符
  • 支持向量机与逻辑回归的区别及 SVM 在图像分类中的应用
  • 【时时三省】(C语言基础)字符数组
  • Transformer Decoder-Only 参数量计算
  • ESP32-S3 学习笔记(1)
  • RabbitMQ概念详解
  • RagFlow 完全指南(一):从零搭建开源大模型应用平台(Ollama、VLLM本地模型接入实战)
  • 零基础玩转sqlmap - 从入门到摸清数据库