最后更新于
最后更新于
输入一个正整数 target ,输出所有和为 target 的连续正整数序列(至少含有两个数)。
序列内的数字由小到大排列,不同序列按照首个数字从小到大排列。
示例 1:
示例 2:
限制:
1 <= target <= 10^5
我们定义两个指针, 控制窗口, 计算窗口中所有数字之和, 等于target
的区间, 加入到结果中去. 由于题目要求区间至少含有两个数, 我们从1
, 2
两个值开始 ,设立两个指针. 区间停止条件是右指针越过target // 2 + 1
, 这是因为区间至少有两个数, 大于这个边界的两个值肯定是大于target
的, 继续遍历只会更大, 也无需继续遍历.
区间数字之和使用等差数列公式计算. 遍历过程中遇到和值等于target
的, 将区间添加到最终的结果列表中; 和值小于target
的, 向右移动右指针; 和值大于target
的, 向右移动左指针. 中间过程我们不会遇到单个值区间符合target
的情况, 因为这些数都小于target
, 不用考虑这里的边际情况.