和为S的连续正数序列
暴力
枚举区间起点 i
,对于每一个 i
,找到最大的 j
,满足 ij 区间和<target
class Solution {
public:
vector<vector<int> > findContinuousSequence(int sum) {
vector<vector<int> > res;
for (int i = 1; i < sum; i ++ )
{
int j=i,t=0;
vector<int> q;
while(t<sum)
{
t+=j;
q.push_back(j);
j++;
}
if(t==sum) res.push_back(q);
}
return res;
}
};
二分优化
寻找 j
的过程可以使用二分,复杂度降为O(nlogn)
双指针优化
可以发现,i
后移,j
单调后移,可以使用双指针优化掉一层循环,复杂度降为O(n)
class Solution {
public:
vector<vector<int> > findContinuousSequence(int sum) {
vector<vector<int> > res;
for (int i = 1,j=1,s=0; i < sum; i ++ )
{
while(s<sum)
{
s+=j;
j++;
}
if(s==sum)
{
vector<int> q;
for (int k = i; k < j; k ++ ) q.push_back(k);
res.push_back(q);
}
s-=i;
}
return res;
}
};
有帮助的话可以点个赞,我会很开心的~
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?