尺取法--连续子序列
Posted 4d24
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了尺取法--连续子序列相关的知识,希望对你有一定的参考价值。
【试题描述】
给定长度为n的正整数数列A(A1, A2, ... , An)以及正整数S,求出总和不小于S的连续子序列的长度的最小值。如果解不存在,则输出0。
【输入】
第一行两个整数N和S,第二行包括n个正整数表示数列A,两两之间用空格分隔。
【输出】
一个符合题目要求的整数。
【输入示例】
5 11
1 2 3 4 5
【输出示例】
3
【其他说明】
数据范围:10 < N < 10^5,0 < Ai < 10^4+1,S < 10^8.
【思路】
先往前面加数,如果总和大了从后边减数,通过记录每组数据比较大小得出最优的解
【代码】
#include<iostream> #include<algorithm> using namespace std; int a[100000]; int main() { int n,s,sum=0,cnt=0,cntt=INT_MAX; int i,j; cin>>n>>s; for(i=0;i<n;i++) cin>>a[i]; i=0;j=0; sum=a[0]; cnt=1; while(i<=j&&j<n) { if(sum<s) { j++; sum+=a[j]; cnt++; } else { cntt=min(cnt,cntt); sum-=a[i]; cnt--; i++; } } if(cntt==INT_MAX) { cout<<0; } else cout<<cntt; return 0; }
以上是关于尺取法--连续子序列的主要内容,如果未能解决你的问题,请参考以下文章