这个题来自于左程云老师的书本p354,但是讲的并不是很透彻,现在这里试着分析如下
代码如下
#include <iostream>
using namespace std;
int arr[]={1,2,1,1,1};
int k=3;
int len=5;
int fun()
{
int ret=0;
int left=0;
int right=0;
int sum=arr[0];
while(right<len)
{
if(sum<k)
{
right++;
if(ret>=len)
break;
sum+=arr[right];
}
else if(sum>k)
{
sum-=arr[left];
left++;
}
else
{
ret=max(ret,right-left+1);
sum-=arr[left];
right++;
left++;
}
}
return ret;
}
int main()
{
cout<<fun()<<endl;
return 0;
}
本文介绍了一个寻找总和恰好等于给定值k的最长连续子数组的算法实现。通过双指针技巧,在O(n)的时间复杂度内解决问题。该算法基于左程云老师书中的一道练习题,但对原题进行了更深入的解析。
179

被折叠的 条评论
为什么被折叠?



