1. 题目
输入一个正整数 target ,输出所有和为 target 的连续正整数序列(至少含有两个数)。
序列内的数字由小到大排列,不同序列按照首个数字从小到大排列。
复制代码
1
2
3
4
5
6
7
8
9
10
11示例 1: 输入:target = 9 输出:[[2,3,4],[4,5]] 示例 2: 输入:target = 15 输出:[[1,2,3,4,5],[4,5,6],[7,8]] 限制: 1 <= target <= 10^5
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/he-wei-sde-lian-xu-zheng-shu-xu-lie-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
2. 解题
- 滑动窗口
[l,r]
,其内的和为sum
- sum < target, r++
- sum > target, l++
- sum = target, 写入答案,l++
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32class Solution { public: vector<vector<int>> findContinuousSequence(int target) { vector<vector<int>> ans; int l = 1, r = 0, sum = 0, i; while(r <= (target+1)/2)//r最多不会超过一半 { if(sum == target) { //相等 vector<int> t; for(i = l; i <= r; ++i) t.push_back(i); if(t.size() > 1) ans.push_back(t); sum -= l;//更新左边界,让他少一个数 l++; } while(sum > target) { //大了,减少左边的数 sum -= l; l++; } while(sum < target) { //小了,增加右边的数 r++; sum += r; } } return ans; } };
最后
以上就是狂野火龙果最近收集整理的关于剑指Offer - 面试题57 - II. 和为s的连续正数序列(滑动窗口)的全部内容,更多相关剑指Offer内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复