算法:和为 s 的连续正数序列

本文通过比喻快慢行走的两个人,详细解释了如何用get_continuous_sequence函数生成连续正数序列,通过累加和的动态调整来找到满足条件的子序列。
摘要由CSDN通过智能技术生成

拟人算法系列文章,以容易理解的方式描述算法,点赞收藏不迷路

和为 s 的连续正数序列

def get_continuous_sequence(target: int) -> list[list[int]]:
    i, j = 1, 2
    mid = target / 2
    cur_sum = i + j
    result = []

    while i < mid:
        if cur_sum > target:
            cur_sum -= i
            i += 1
        elif cur_sum < target:
            j += 1
            cur_sum += j
        else:
            result.append([x for x in range(i, j+1)])
            cur_sum -= i
            i += 1
            j += 1
            cur_sum += j

    return result

if __name__ == '__main__':
    target = 15
    print(get_continuous_sequence(target)) # [[1, 2, 3, 4, 5], [4, 5, 6], [7, 8]]

好比走的一快一慢的两个人,先初始慢的人在第一个位置,快的人在第二个位置,于是目前累加值为1+2=3,然后只要走的慢的人没有超过一半(如果慢的人都超过一半,两人之间的累加和肯定超过目标值),那么

  • 如果累加和大于目标值,于是减去走得慢的人的值,并让走的慢的人往前走一步,
  • 如果累加和小于目标值,于是让走得快的人往前走一步,并加上走的快的人的值
  • 如果累加和等于目标值,于是让两个人都往前走一步,同时也相应改变当前和
  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值