我是靠谱客的博主 儒雅玫瑰,最近开发中收集的这篇文章主要介绍剑指offer实践 ——57.2.和为s的连续正数序列(python版)题目一、双指针实现滑动窗口,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

文章目录

  • 题目
  • 一、双指针实现滑动窗口


题目

和为s的连续正数序列
在这里插入图片描述


一、双指针实现滑动窗口

57.1.和为s的数字
和为s的正整数序列一定是在【1,2,……,s-1】这个数组中出现的。
仍旧设置两个指针:l,r 分别为1,2(因为这个子序列里至少有两个数字)。
l -> r 的子序列的和 < s 时,r可继续扩展,+1
l -> r 的子序列的和 > s 时,l+1
l -> r 的子序列的和 = s 时, 将这个子序列放入结果中,l+1继续寻找

l -> r 的子序列 是一个第一项为l,公差为1 的等差序列。求和时使用等差数列的求和公式:
在这里插入图片描述

def find_arr_with_sum_s_1(target):
    l, r = 1, 2
    res = []
    while l < r < target:
        sub_sum = int((r - l + 1) * (r + l) / 2)
        if sub_sum < target:
            r += 1
        elif sub_sum > target:
            l += 1
        else:
            res.append(list(range(l, r + 1)))
            l += 1
    return res

时间复杂度:由于两个指针移动均单调不减,且最多移动 target/2 次,即方法一提到的枚举的上界,所以时间复杂度为 O(target) 。

空间复杂度:O(1) ,除了答案数组只需要常数的空间存放若干变量。

在这里插入图片描述

最后

以上就是儒雅玫瑰为你收集整理的剑指offer实践 ——57.2.和为s的连续正数序列(python版)题目一、双指针实现滑动窗口的全部内容,希望文章能够帮你解决剑指offer实践 ——57.2.和为s的连续正数序列(python版)题目一、双指针实现滑动窗口所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(50)

评论列表共有 0 条评论

立即
投稿
返回
顶部