题目概述
解题思路
我的思路是用双指针法,记录当前子数组的长度和总和,然后动态地调整即可。
方法性能
#include<iostream>
using namespace std;
int main()
{
int N, K;
cin >> N >> K;
int *A = new int[N];
for (int i = 0; i < N;++i)
cin >> A[i];
int sta_i = 0, end_i = 0, sum = A[0], max_len = 0;
while(end_i < N)
{
if(sum == K)
{
max_len = max(max_len, end_i - sta_i + 1);
if(sta_i == end_i)
{
end_i++;
sum += A[end_i];
}
sum -= A[sta_i];
sta_i++;
}
else if(sum < K)
{
end_i++;
sum += A[end_i];
}
else
{
sum -= A[sta_i];
sta_i++;
if(sta_i > end_i)
{
end_i++;
sum += A[end_i];
}
}
}
cout << max_len << endl;
return 0;
}
示例代码