笔记:尺取法(最短子区间问题)
尺取法定义(基本概述)
尺取法: 顾名思义,像尺子一样取一段,借用挑战书上面的话说,尺取法通常是对数组保存一对下标,即所选取的区间的左右端点,然后根据实际情况不断地推进区间左右端点以得出答案。尺取法比直接暴力枚举区间效率高很多,尤其是数据量大的时候,所以说尺取法是一种高效的枚举区间的方法,是一种技巧,一般用于求取有一定限制的区间个数或最短的区间等等。当然任何技巧都存在其不足的地方,有些情况下尺取法不可行,无法得出正确答案,所以要先判断是否可以使用尺取法再进行计算。
使用尺取法时应清楚以下四点:
1、 什么情况下能使用尺取法? 2、何时推进区间的端点? 3、如何推进区间的端点? 4、何时结束区间的枚举?
尺取法通常适用于选取区间有一定规律,或者说所选取的区间有一定的变化趋势的情况,通俗地说,在对所选取区间进行判断之后,我们可以明确如何进一步有方向地推进区间端点以求解满足条件的区间,如果已经判断了目前所选取的区间,但却无法确定所要求解的区间如何进一步得到根据其端点得到,那么尺取法便是不可行的。首先,明确题目所需要求解的量之后,区间左右端点一般从最整个数组的起点开始,之后判断区间是否符合条件在根据实际情况变化区间的端点求解答案。
例题:
给定一个序列,找出最短的子序列长度,使得其和大于或等于S。
分析:
首先,序列都是正数,如果一个区间其和大于等于S了,那么不需要在向后推进右端点了,因为其和也肯定大于等于S但长度更长,所以,当区间和小于S时右端点向右移动,和大于等于S时,左端点向右移动以进一步找到最短的区间,如果右端点移动到区间末尾其和还不大于等于S,结束区间的枚举。
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <cmath>
#include <map>
#include <string>
#include <vector>
using namespace std ;
int t,n,k;
const int inf=100000000;
typedef long long ll;
vector<ll> vi;
int main(){cin>>t;while(t--){int ans=inf;cin>>n>>k;for(int i=0;i<n;i++){int num;cin>>num;vi.push_back(num);}int st=0,en=0,sum=0;//起点和终点sort(vi.begin(),vi.end());while(1){while(en<n && sum<k){sum+=vi[en++];}if(sum<k)break;ans=min(en-st,ans);//最后的en是多加了1的,所以此处不需要写en-st+1sum-=vi[st++];//左端点继续右推}if(ans==inf)ans=0;cout<<ans<<endl;vi.clear();}return 0;
}
笔记:尺取法(最短子区间问题)相关推荐
- 51nod 1127 最短的包含字符串(尺取法)
题目: 简单尺取法 代码: #include <iostream> #include <algorithm> #include <map> #include < ...
- 尺取法 — 详解 + 例题模板(全)
尺取法:顾名思义,像尺子一样取一段,借用挑战书上面的话说,尺取法通常是对数组保存一对下标,即所选取的区间的左右端点,然后根据实际情况不断地推进区间左右端点以得出答案.尺取法比直接暴力枚举区间效率高很多 ...
- ACM常用的解题技巧:尺取法
常用的解题技巧:尺取法 尺取法:顾名思义,像尺子一样取一段,借用挑战书上面的话说,尺取法通常是对数组保存一对下标,即所选取的区间的左右端点,然后根据实际情况不断地推进区间左右端点以得出答案.之所以需要 ...
- ACM常用的解题技巧:尺取法及相关例题
常用的解题技巧:尺取法 尺取法:顾名思义,像尺子一样取一段,借用挑战书上面的话说,尺取法通常是对数组保存一对下标,即所选取的区间的左右端点,然后根据实际情况不断地推进区间左右端点以得出答案.之所以需要 ...
- ACM尺取法常见题解
大佬博客地址 常用的解题技巧:尺取法 尺取法:顾名思义,像尺子一样取一段,借用挑战书上面的话说,尺取法通常是对数组保存一对下标,即所选取的区间的左右端点,然后根据实际情况不断地推进区间左右端点以得出答 ...
- 【常用技巧精选】尺取法
整理的算法模板合集: ACM模板 目录 1.反向扫描 1 找指定和的整数对 A.UVA1121 Subsequence B.POJ 3320 Jessica's Reading Problem C.l ...
- ACM—各种模拟 总结(字符串,尺取法,数学问题)习题汇总
目录 一.字符串模拟 二. 高精度计算 1. 回文数(高精度,进制转换) 三.数学问题模拟 四.尺取法(双指针法) 1.都说小镇的切糕贵 (尺取法,字符串) umi和弓道 五.奇怪的模拟 x的位数=l ...
- poj2566Bound Found尺取法进阶(java)
题目链接: 这个尺取法的思想挺好的,如果第一次做尺取法题,不妨看下尺取法入门题. 题目大意: 多组测试数据(0,0)截止. 每组数据输入 n,k(n数字个数,k询问次数) 下一行n个数表示序列. 接下 ...
- poj3061尺取法/前缀和 二分(java)
今天遇到这题因为以前没见到过,当时就是想着应该有着一个很简单的方法可以过但是奈何就是没思路.后来看了别人思路写了下来.学习了尺取法 poj3061 题目介绍: Description A sequen ...
最新文章
- pandas使用query函数和sample函数、使用query函数筛选dataframe中的特定数据行并使用sample函数获取指定个数的随机抽样数据
- qcolor文字生成颜色
- Acronis True Image无法卸载或者卸载导致无法开机解决办法
- Arcgis Server发布服务
- 字符集_一文搞清楚unicode字符集的三种实现方式
- Lazarus Coolbar and AnchroDocking
- 微软发布TypeScript用以改进JavaScript开发
- php smarty 配置,php Smarty详细配置
- CheckBoxPreference组件
- 揭开互联网金融健康发展意见神秘面纱
- css代码使网页文本段落首行缩进两个字符以及和行高
- QTableWidget背景色交替
- 自定义 View 之雅虎新闻视差动画
- win10重装系统后,蓝牙开关消失,点击添加蓝牙或其他设备,显示无法连接
- 怎么禁止恢复微信聊天记录?学会这几招以备不时之需
- 中央空调系统运行原理以及相关设备介绍
- java web 表单提交_Java Web 表单(form)提交问题!
- linux系统安装达梦数据库
- 零基础学c语言 第2版 pdf下载,《零基础学C语言(第2版)》.(康莉,李宽).[PDF].@ckook.pdf...
- 鱼眼深度估计!环视近场感知系列之几何预测