和为s的连续整数序列

本文介绍了一种寻找和为target的连续正整数序列的方法,包括暴力法和滑动窗口优化解法。通过滑动窗口优化,实现了时间复杂度为O(target)的解决方案。
摘要由CSDN通过智能技术生成

一、需求

  • 输入一个正整数 target ,输出所有和为 target 的连续正整数序列(至少含有两个数)。

  • 序列内的数字由小到大排列,不同序列按照首个数字从小到大排列。

示例 1:

输入:target = 9
输出:[[2,3,4],[4,5]]
示例 2:

输入:target = 15
输出:[[1,2,3,4,5],[4,5,6],[7,8]]

二、暴力法

 2.1  思路分析

  1. 根据需求,我们要找一个连续的正整数序列,其和为target,那么我们可以在1 ~ target中找,即target = 9时,我们就在 1 2 3 4 5 6 7 8 9中寻找;
  2. 因为题目要求序列长度至少为2,我们设置两个变量来控制这个序列的边界,令 i 指向序列的左边界,j 指向序列的右边界,如上例所示,当 i 指向4,就是左边界的最大值,j 指向的右边界的最大值 = i 指向左边界的最大值 + 1;
  3. 故左边界的上界为 (target - 1) / 2,右边界的上界为 (target + 1) / 2;
  4. 暴力法的思路就是在边界范围内,求出每一个连续正整数序列的和,使用 sum 来记录和,边求和边判断,①若 sum > target,说明当前以某位数为起点的连续整数和不符合要求,直接break,移动到该位数的下一位,比如移动到示例中 3 4 5 ,此时 sum = 12,直接退出进行下一轮,更新左边界为 4,②若 sum < target,j++,继续累加,③ 若sum == target,将当前的 [i,j ] 加入到数组中。退出循环,将数组加入到list中;

 2.2  代码实现

class Solution {
    public int[][] findContinuousSequence(int target) {
        //数组为引用类型
        List<int[]> list = new ArrayList<&
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值