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;
}