首页 > 试题广场 >

和为S的连续正数序列

[编程题]和为S的连续正数序列
  • 热度指数:504437 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 64M,其他语言128M
  • 算法知识视频讲解
小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列?

数据范围:
进阶:时间复杂度

输出描述:
输出所有和为S的连续正数序列。序列内按照从小至大的顺序,序列间按照开始数字从小到大的顺序
示例1

输入

9

输出

[[2,3,4],[4,5]]
示例2

输入

0

输出

[]
头像 牛客题解官
发表于 2020-06-01 15:12:57
精华题解 题目的主要信息: 找出所有和为S的连续正数序列,序列至少包括两个数 序列内按照从小至大的顺序,序列间按照开始数字从小到大的顺序 举一反三: 学习完本题的思路你可以解决如下题目: JZ59. 滑动窗口的最大值 JZ57. 和为S的两个数字 方法一:枚举(前置方法) 思路: 我们可以从数字1开始枚举 展开全文
头像 Maokt
发表于 2021-07-07 15:29:21
精华题解 算法思想一:求和公式 解题思路: 设连续正整数序列的左边界 i 和右边界 j ,则此序列的 元素和 tsum 等于 元素平均值 (i+j)/2 乘以 元素数量 (j−i+1) ,即        &nb 展开全文
头像 漫漫云天自翱翔
发表于 2021-06-18 22:11:12
精华题解 题解一:暴力思路时间复杂度:O(sumsqrt(sum))可以通过求和公式并代入化简至如下所以做多累加到 次,所以时间复杂度为O(sumsqrt(sum))空间复杂度:O(1),并未申请使用除结果以外的其他内存空间 class Solution { public: vector<vec 展开全文
头像 鸠摩罗什
发表于 2021-06-20 09:04:19
精华题解 1、和为S的连续整数序列描述小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给 展开全文
头像 不努力就会倒数
发表于 2020-01-16 23:38:30
import java.util.ArrayList; /** 思路: 输入sum=20(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 1,定义两个指针,左指针从1开始,右指针从2开始 循环开始 2,求和(1+2 = 3 3,如果判断3小于20,右指针++,2变为3,求和 展开全文
头像 若星汉天空
发表于 2020-03-18 20:31:01
既然是数学问题,那么就用数学的方法来解决(笑) 无非就是一个等差数列求和的问题 等差数列求和公式: 其中: 代入可得: 并且 满足正数的条件,所以 可得: 算法复杂度: 接下来就可以愉快地写代码啦: function FindContinuousSequence(sum) { c 展开全文
头像 一叶浮尘
发表于 2019-08-27 12:56:04
题目描述小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的 展开全文
头像 我要拿30w
发表于 2019-10-06 21:16:30
/** 思路: 1、双指针技术,就是相当于有一个窗口,窗口的左右两边就是两个指针 2、根据窗口内值之和来确定窗口的位置和宽度。 /
头像 ZhenhYang
发表于 2019-10-09 16:14:37
题目:小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找 展开全文
头像 牛客129700802号
发表于 2021-04-17 22:59:37
偏数学思路 看大家都在双指针滑动窗口,要么就是遍历。 提供一个偏数学的思路。十行代码解决问题,复杂度为。 等差数列的数字个数为n,起始数字为a, 主要思路是在合适范围内遍历n,然后求解a判断是否为整数,若为整数则ok。 代码如下,具体公式推导在后边。 class 展开全文
头像 ̯͡↗Captain⚡
发表于 2019-08-27 20:17:36
一串数字的和 = 平均值 * 数字个数;连续数字的平均值分为两种情况: 奇数个数字:中位数、(整数) 偶数个数字:中间两个数的平均 (xx.5) 所以我们要找的就是:符合条件的平均值和数字个数: 平均值为整数,数字个数必定为奇数 平均值为xx.5, 数字个数必定为偶数 假设刚开始有i(0~s 展开全文
头像 稚园
发表于 2020-12-12 20:51:44
题目描述小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的 展开全文
头像 ccจุ๊บ
发表于 2020-02-15 19:00:55
# -*- coding:utf-8 -*- class Solution: def FindContinuousSequence(self, tsum): # write code here # tsum小于3的直接不用考虑 if tsum& 展开全文
头像 枫火琅琊
发表于 2021-06-22 22:40:13
牛客-JZ41题解 题目分析 题目标签🏷️:数组,数学公式,滑动窗口,双指针 初看,这道题是要求我们在一个无穷整数序列中找出所有的连续正整数数组arr使得数组中元素的和恰好位S。 看起来很麻烦,因为连续正整数数组有无穷多个,那么如何在这无穷多个数组中选择找出目标数组呢? 首先,我们需要从题目 展开全文