dd爱框框
dd爱框框
滚动窗口问题
右指针到边界时结束,当sum>=x的时候进入判断,如果路径更短,则替换掉,之后sum减掉左指针,左指针右移,此时若sum>=x仍然成立,则继续更新并重复,如果此时不成立,则右指针右移,继续判断。
#include<iostream>
using namespace std;
const int N = 1e7 + 10;
int arr[N];
int n, x;
int main()
{
int retlen = N, retleft = -1, retright = -1;
cin >> n;
cin >> x;
int left = 1;
int right = 1;
int sum = 0;
for (int i = 1; i <= n; i++)
{
cin >> arr[i];
}
while (right <= n)
{
sum += arr[right];
while (sum >= x)
{
if (right - left + 1 < retlen)
{
retleft = left;
retright = right;
retlen = right - left + 1;
}
sum -= arr[left++];
}
right++;
}
cout << retleft << ' ' << retright;
return 0;
}