Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

面试题57 - II. 和为s的连续正数序列 #12

Open
yankewei opened this issue Mar 6, 2020 · 0 comments
Open

面试题57 - II. 和为s的连续正数序列 #12

yankewei opened this issue Mar 6, 2020 · 0 comments
Labels
双指针 题目包含双指针解法 滑动窗口 题目包含滑动窗口解法 简单 题目难度为简单

Comments

@yankewei
Copy link
Owner

yankewei commented Mar 6, 2020

输入一个正整数 target ,输出所有和为 target 的连续正整数序列(至少含有两个数)。
序列内的数字由小到大排列,不同序列按照首个数字从小到大排列。

示例 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

解法

感觉这种连续的序列什么的,可以使用滑动窗口解决,因为窗口中的数字都是有规律的

func findContinuousSequence(target int) [][]int {
    var ret [][]int
    s := make([]int, target)
    for i := 0; i < target; i++ {
        s[i] = i + 1
    }
    var l, r int
    for l < target-1 && r < target-1 {
        add := (s[l] + s[r]) * (r - l + 1) / 2
        if add == target {
            r++
            ret = append(ret, s[l:r])
        } else if add > target {
            l++
        } else {
            r++
        }
    }
    return ret
}
@yankewei yankewei added 简单 题目难度为简单 滑动窗口 题目包含滑动窗口解法 双指针 题目包含双指针解法 labels Mar 6, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
双指针 题目包含双指针解法 滑动窗口 题目包含滑动窗口解法 简单 题目难度为简单
Projects
None yet
Development

No branches or pull requests

1 participant