Leetcode剑指 Offer 57 - II. 和为s的连续正数序列(双指针)

Posted !0 !

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Leetcode剑指 Offer 57 - II. 和为s的连续正数序列(双指针)相关的知识,希望对你有一定的参考价值。

题目链接:https://leetcode-cn.com/problems/he-wei-sde-lian-xu-zheng-shu-xu-lie-lcof/

解题思路

我们可以维护左右两个边界,记录左右边界中的区间和 s s s,使得 s s s等于 t a r g e t target target。如果 s = = t a r g e t s == target s==target,直接记录 i i i j j j的值;
如果 s > = t a r g e t s >= target s>=target i i i往右移,并且 s s s减去 i i i
如果 s < t a r g e t s < target s<target j j j往右移, s s s加上 j j j

代码

class Solution {
    public int[][] findContinuousSequence(int target) {
        int i = 1, j = 2, s = 3;    //初始化左右边界和区间和
        List<int[]> res = new ArrayList<>();    //记录最终答案
        while(i < j) {      //如果左边界大于等于右边界就退出
            if(s == target) {   //区间和等于target
                int[] ans = new int[j - i + 1]; //记录答案
                for(int k = i; k <= j; k++)
                    ans[k - i] = k;
                res.add(ans);
            }
            if(s >= target) {   //如果s >= target,i往右移,并且s减去i;
                s -= i;
                i++;
            } else {    //如果s < target,j往右移,s加上j;
                j++;
                s += j;
            }
        }
        return res.toArray(new int[0][]);
    }
}

复杂度分析

  • 时间复杂度: O ( n ) O(n) O(n)
  • 空间复杂度: O ( 1 ) O(1) O(1)

以上是关于Leetcode剑指 Offer 57 - II. 和为s的连续正数序列(双指针)的主要内容,如果未能解决你的问题,请参考以下文章

[LeetCode]剑指 Offer 57 - II. 和为s的连续正数序列

LeetCode剑指offer57 II和为s的连续正数序列(用vector模拟滑动窗口)

0510-II173942555757-II64

[LeetCode]剑指 Offer 32 - II. 从上到下打印二叉树 II

LeetCode(剑指 Offer)- II. 剪绳子 II

LeetCode(剑指 Offer)- II. 剪绳子 II