剑指Offer-41.和为S的连续正数序列(C++/Java)

时间:2023-02-18 15:10:52

题目:

小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列? Good Luck!

输出描述:

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

分析:

我们可以初始化left和right分别为1和2,作为正数序列的左右边界,计算序列的数字和,利用高斯求和公式即可。

当我们的数列和小于所给的sum时,可以将right,也就是数列的右边界加1,增加我们的数列和。

当我们的数列和大于所给的sum时,可以将left,也就是数列的左边界加1,从而减小数列和。

当我们的数列和恰好等于所给的sum时,保存当前左边界到有边界中所有的正数,作为一个解,将right加1,继续取寻找解。

下面我们以15为sum,看一下数列中左右边界的变换情况。

剑指Offer-41.和为S的连续正数序列(C++/Java)

程序:

C++

class Solution {
public:
vector<vector<int> > FindContinuousSequence(int sum) {
if(sum == )
return res;
int left = ;
int right = ;
while(left < right){
if((left + right) *(right - left + ) / == sum){
vector<int> temp;
for(int i = left; i <= right; ++i)
temp.push_back(i);
res.push_back(temp);
right++;
}
else if((left + right) *(right - left + ) / > sum){
left++;
}
else{
right++;
}
}
return res;
}
private:
vector<vector<int> > res;
};

Java

import java.util.ArrayList;
public class Solution {
public ArrayList<ArrayList<Integer> > FindContinuousSequence(int sum) {
if(sum == 0)
return res;
int left = 1;
int right = 2;
while(left < right) {
int arraySum = (left + right) * (right - left + 1) / 2;
if(arraySum == sum) {
ArrayList<Integer> temp = new ArrayList<>();
for(int i = left; i <= right; ++i) {
temp.add(i);
}
res.add(temp);
temp = null;
right++;
}
else if(arraySum < sum) {
right++;
}
else {
left++;
}
}
return res;
}
private ArrayList<ArrayList<Integer>> res = new ArrayList<ArrayList<Integer>>();
}

剑指Offer-41.和为S的连续正数序列(C++/Java)的更多相关文章

  1. 剑指Offer 41&period; 和为S的连续正数序列 (其他)

    题目描述 小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100.但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数).没多久,他 ...

  2. &lbrack;剑指Offer&rsqb; 41&period;和为S的连续正数序列

    题目描述 小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100.但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数).没多久,他 ...

  3. 【剑指Offer】和为S的连续正数序列 解题报告(Python)

    [剑指Offer]和为S的连续正数序列 解题报告(Python) 标签(空格分隔): 剑指Offer 题目地址:https://www.nowcoder.com/ta/coding-interview ...

  4. 【剑指offer】和为定值的连续正数序列

    .可是他并不满足于此,他在想到底有多少种连续的正数序列的和为100(至少包含两个数).没多久,他就得到还有一组连续正数和为100的序列:18,19,20,21,22.如今把问题交给你,你能不能也非常快 ...

  5. 《剑指offer》和为S的连续正数序列

    本题来自<剑指offer> 反转链表 题目: 思路: C++ Code: Python Code: 总结:

  6. Go语言实现:【剑指offer】和为S的连续正数序列

    该题目来源于牛客网<剑指offer>专题. 小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100.但是他并不满足于此,他在想究竟有多少种连续的正数 ...

  7. 剑指offer系列46---和为s的连续正数序列

    [题目]输出所有和为S的连续正数序列.序列为:1,2,3,4,5,6,7,8................ * 序列内按照从小至大的顺序,序列间按照开始数字从小到大的顺序 package com.e ...

  8. 【剑指offer】 和为s的连续正数序列,C&plus;&plus;实现

    原创博文,转载请注明出处! # 题目 # 思路 设置两个辅助变量small和big,small表示序列的最小值,big表示序列的最大值.如果sum(small ~ big) > s,则增大sma ...

  9. 【剑指offer】和为S的连续正数序列

    题目描述 小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100.但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数).没多久,他 ...

  10. 剑指offer:和为S的连续正数序列

    题目描述: 小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100.但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数).没多久, ...

随机推荐

  1. 理解水平扩展和垂直扩展 (转载 http&colon;&sol;&sol;yunjiechao-163-com&period;iteye&period;com&sol;blog&sol;2126981)

      当一个开发人员提升计算机系统负荷时,通常会考虑两种方式垂直扩展和水平扩展.选用哪种策略主要依赖于要解决的问题 以及系统资源的限制.在这篇文章中我们将讲述这两种策略并讨论每种策越的优缺点.如果你已经 ...

  2. 自定义动画方法animate

    animate的使用方法:animate(params,speed,callback); 例子:animate({ right: "-=600px",height:"+= ...

  3. FR &num;3题解

    A. 傻逼题?...前缀和什么的随便搞搞就好了. #include<iostream> #include<cstdio> #include<cstring> #in ...

  4. 【HTML5】增强的表单

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  5. 2016年android程序员需要知道的新技术

    2016你需要了解Android有以下新兴的技术与框架,有些也许还不成熟,但是你应该去了解下,也许就是未来的方向. Kotlin 作为 Android 领域的 Swift,绝对让你如沐新风.抛弃沉重的 ...

  6. caffe实现GAN

    我实现GAN网络结构比较复杂: 通过建立两个一模一样的网络,他们相对应的层共享权重,一个网络用来跟新D model另一个网络用来更新G model 更新G model的网络,D部分只进行梯度传递,不进 ...

  7. java设置字符串编码、转码

    Unicode(统一码.万国码.单一码)是计算机科学领域里的一项业界标准,包括字符集.编码方案等.Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一 ...

  8. &lbrack;转&rsqb;GREP for Windows

    http://www.interlog.com/~tcharron/grep.html A very flexible grep for windows GREP is a well known to ...

  9. 51Nod 1668 非010串

    这是昨天上课ChesterKing dalao讲线代时的例题 当时看到这道题就觉得很水,记录一下后面两位的情况然后讨论一下转移即可 由于之前刚好在做矩阵题,所以常规的矩阵快速幂优化也很简单 好我们开始 ...

  10. S5PV210串口

    串口设置之输入输出字符 S5PV210 UART相关说明        通用异步收发器简称UART,即UNIVERSAL ASYNCHRONOUS RECEIVER AND TRANSMITTER,它 ...