剑指 Offer 57 - II. 和为s的连续正数序列
思路#
方法一:枚举 + 暴力#
1 class Solution { 2 public: 3 vector<vector<int>> findContinuousSequence(int target) { 4 vector<vector<int>> res; 5 for(int i = 1; i <= target/2; ++i) { 6 vector<int> tmp; 7 int sum = 0; 8 for(int j = i; j < target && sum < target; ++j) { 9 sum += j; 10 tmp.push_back(j); 11 } 12 13 if(sum == target) { 14 res.push_back(tmp); 15 } 16 } 17 18 return res; 19 } 20 };
1 class Solution { 2 public: 3 vector<vector<int>> findContinuousSequence(int target) { 4 vector<vector<int>> vec; 5 vector<int> res; 6 int sum = 0, limit = (target - 1) / 2; // (target - 1) / 2 等效于 target / 2 下取整 7 for (int x = 1; x <= limit; ++x) { 8 long long delta = 1 - 4 * (x - 1ll * x * x - 2 * target); 9 if (delta < 0) { 10 continue; 11 } 12 int delta_sqrt = (int)sqrt(delta + 0.5); 13 if (1ll * delta_sqrt * delta_sqrt == delta && (delta_sqrt - 1) % 2 == 0) { 14 int y = (-1 + delta_sqrt) / 2; // 另一个解(-1-delta_sqrt)/2必然小于0,不用考虑 15 if (x < y) { 16 res.clear(); 17 for (int i = x; i <= y; ++i) { 18 res.push_back(i); 19 } 20 vec.push_back(res); 21 } 22 } 23 } 24 return vec; 25 } 26 };
1 class Solution { 2 public: 3 vector<vector<int>> findContinuousSequence(int target) { 4 vector<vector<int>> res; 5 int l = 1, r = 2; 6 while(l < r) { 7 int sum = (r-l+1)*(l+r)/2; 8 if(sum == target) { 9 vector<int> tmp; 10 for(int i = l; i <= r; ++i) 11 tmp.push_back(i); 12 res.push_back(tmp); 13 ++l; 14 } else if(sum < target) { 15 ++r; 16 } else { 17 ++l; 18 } 19 } 20 21 return res; 22 } 23 };
也可以不使用求和公式求sum,而是每次对指针进行移动的时候,同时对sum的值进行改变。代码如下:
1 class Solution { 2 public: 3 vector<vector<int>> findContinuousSequence(int target) { 4 vector<vector<int>> res; 5 int i = 1, j = 2; 6 int sum = 3; 7 while(i < j) { 8 if(sum < target) { 9 ++j; 10 sum += j; 11 } else if (sum > target) { 12 sum -= i; 13 ++i; 14 } else { 15 vector<int> v; 16 for(int k = i; k <= j; ++k) { 17 v.push_back(k); 18 } 19 res.push_back(v); 20 sum -= i; 21 ++i; 22 } 23 } 24 25 return res; 26 } 27 };
参考#
分类:
剑指Offer(第2版)
标签:
双指针
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南