首页 > 其他分享 >剑指 Offer 57 - II. 和为s的连续正数序列

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

时间:2023-09-10 22:55:39浏览次数:46  
标签:target Offer int 57 II ++ 序列 滑动 sum

题目链接: 剑指 Offer 57 - II. 和为s的连续正数序列

题目描述:

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

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

解法思路:

双指针:
当总和小于 target 时,j 指针向后移动,直到 大于或等于停止
判断此时sum :

  • 若 等于 target ,则 放入答案,
  • 然后 i 指针向后移动,并从 sum 中减去

代码:

func findContinuousSequence(target int) [][]int {
    res := [][]int{}
    sum := 1
    for i,j := 1,1;i < target;i++{
        for sum < target{
            j++
            sum += j 
        }
        if sum == target {
            var path  []int
            for k :=i ; k <= j; k++{
                path = append(path,k)
            } 
            res = append(res,path)
        }
        sum -= i
    }
    return res
}

滑动窗口:

  • 利用 l,r 作为边界维护滑动窗口和总值
  • 当和总值小于 target,r++ 向右扩大滑动窗口
  • 当和总值大于 target,l++ 向右缩小滑动窗口
  • 当和总值等于 target,存储当前 [l,r] 的排序,并继续 l++ 向右缩小滑动窗口
func findContinuousSequence(target int) [][]int {
    ans := make([][]int, 0)
    l, r := 1, 2
    for l <= target/2 {
        sum := (l + r) * (r-l+1)/2
        if sum == target {
            res := make([]int, 0)
            for i := l; i <= r; i++ {
                res = append(res, i)
            }
            ans = append(ans, res)
            l++
        } else if sum < target {
            r++
        } else if sum > target {
            l++
        }
    }
    return ans
}

标签:target,Offer,int,57,II,++,序列,滑动,sum
From: https://www.cnblogs.com/lxing-go/p/17692217.html

相关文章

  • Java版剑指offer:平衡二叉树
    Java版剑指offer:平衡二叉树描述输入一棵二叉树,判断该二叉树是否是平衡二叉树。在这里,我们只需要考虑其平衡性,不需要考虑其是不是排序二叉树平衡二叉树(BalancedBinaryTree),具有以下性质:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉......
  • java版本剑指offer:链表中倒数最后k个结点
    java版本剑指offer:链表中倒数最后k个结点描述输入一个链表,输出一个链表,该输出链表包含原链表中从倒数第k个结点至尾节点的全部节点。如果该链表长度小于k,请返回一个长度为0的链表。最简单的方式就是使用两个指针,第一个指针先移动k步,然后第二个指针再从头开始,这个时候这两个指针......
  • java版本剑指offer:反转链表
    java版本剑指offer:反转链表描述输入一个链表,反转链表后,输出新链表的表头。示例1输入:{1,2,3}返回值:{3,2,1}此题想考察的是:如何调整链表指针,来达到反转链表的目的。初始化:3个指针:1)pre指针指向已经反转好的链表的最后一个节点,最开始没有反转,所以指向null2)cur指针指向待反转链表......
  • java剑指offer:两个链表的第一个公共结点
    java剑指offer:两个链表的第一个公共结点描述输入两个无环的单链表,找出它们的第一个公共结点。(注意因为传入数据是链表,所以错误测试数据的提示是用其他方式显示的,保证传入数据是正确的)解题思路:先假设链表A头结点与结点8的长度与链表B头结点与结点8的长度相等,那么就可以用双指针。......
  • Java版剑指offer:链表中环的入口结点
    Java版剑指offer:链表中环的入口结点描述给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,返回null。输入描述:输入分为2段,第一段是入环前的链表部分,第二段是链表环的部分,后台将这2个会组装成一个有环或者无环单链表返回值描述:返回链表的环的入口结点即可。而我们后台程序......
  • java版本剑指offer:二分查找
    java版本剑指offer:二分查找描述请实现有重复数字的升序数组的二分查找给定一个元素有序的(升序)整型数组nums和一个目标值target,写一个函数搜索nums中的第一个出现的target,如果目标值存在返回下标,否则返回-1示例1输入:[1,2,4,4,5],4返回值:2说明:从左到右,查找到第1个为4的......
  • java版本剑指offer:在二叉树中找到两个节点的最近公共祖先
    java版本剑指offer:在二叉树中找到两个节点的最近公共祖先描述给定一棵二叉树(保证非空)以及这棵树上的两个节点对应的val值o1和o2,请找到o1和o2的最近公共祖先节点。注:本题保证二叉树中每个节点的val值均不相同。示例1输入:[3,5,1,6,2,0,8,#,#,7,4],5,1返回值:3方法一:递......
  • Java版剑指offer:用两个栈实现队列
    Java版剑指offer:用两个栈实现队列描述用两个栈来实现一个队列,分别完成在队列尾部插入整数(push)和在队列头部删除整数(pop)的功能。队列中的元素为int类型。保证操作合法,即保证pop操作时队列内已有元素。示例:输入:[“PSH1”,“PSH2”,“POP”,“POP”]返回:1,2解析:“PSH1......
  • 洛谷 P5218 无聊的水题 II
    洛谷传送门无聊的水题。根据裴蜀定理,显然能组合出任意值的充要条件是,选出的数的\(\gcd=1\)。设\(g(i)\)为在\(1\simn\)中选出若干个数使得它们\(\gcd=i\)的方案数,\(f(i)\)为在\(1\simn\)中选出若干个数使得它们\(\gcd\)是\(i\)的倍数的方案数。我们有:\[......
  • CMU15721 笔记:Project 1 - Foreign Data Wrapper
    CMU15-721Project1-ForeignDataWrapperPre2003年,SQL标准中增加了一个访问远程数据的规范,称为外部数据的SQL管理(SQL/MED)。从9.1版开始,PostgreSQL就开始开发这个特性来实现SQL/MED的一部分。在SQL/MED中,远程服务器上的表称为外部表。PostgreSQL的外部数据包裹......