美丽的区间
题目描述
给定一个长度为 nn 的序列 a1,a2,⋯,ana1,a2,⋯,an 和一个常数 SS。
对于一个连续区间如果它的区间和大于或等于 SS,则称它为美丽的区间。
对于一个美丽的区间,如果其区间长度越短,它就越美丽。
请你从序列中找出最美丽的区间。
输入描述
第一行包含两个整数 n,Sn,S,其含义如题所述。
接下来一行包含 nn 个整数,分别表示 a1,a2,⋯,ana1,a2,⋯,an。
10≤N≤10510≤N≤105,1×ai≤1041×ai≤104,1≤S≤1081≤S≤108。
输出描述
输出共一行,包含一个整数,表示最美丽的区间的长度。
若不存在任何美丽的区间,则输出 00。
输入输出样例
示例 1
输入
5 6
1 2 3 4 5
输出
2
代码如下:
#include <iostream>
#include <vector>
#include <climits>
using namespace std;
int main() {
int n, S;
cin >> n >> S;
vector<int> a(n);
for (int i = 0; i < n; i++) cin >> a[i];
int left = 0, sum = 0;
int min_len = INT_MAX;
for (int right = 0; right < n; right++) {
sum += a[right];
while (sum >= S) { //成立就left移动,否则就right移动
min_len = min(min_len, right - left + 1);
sum -= a[left];
left++;
}
}
if (min_len == INT_MAX) {
cout << 0 << endl;
} else {
cout << min_len << endl;
}
return 0;
}