【剑指Offer】41、和为S的连续正数序列
题目描述:
小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列? Good Luck!
输出描述:
输出所有和为S的连续正数序列。序列内按照从小至大的顺序,序列间按照开始数字从小到大的顺序。
解题思路:
对于本题,由于是在一个连续序列中连续查找,可以使用类似滑动窗口的思想,使用双指针定位滑动窗口的上下边界,用两个数low和high分别指向当前序列中的最大和最小值,初始low为1,high为2。如果从low到high的序列的和大于给定的S,那么说明可以去掉一个比较小的值,即增大low的值(相当于去掉了一个最小值,窗口收缩)。反之,如果从low到high的序列和小于给定的S,则应该增加一个值,即增大high(相当于窗口扩张,让这个窗口包含更多的值)。这样依次查找就可以找到所有的满足条件的序列,并且符合序列内按照从小至大的顺序,序列间按照开始数字从小到大的顺序要求。
另外,需要注意的是:循环的结束条件。由于要求序列至少包含两个数,因此当low追上high或者当low超过S的一半时,即可停止查找。
举例:
**编程实现(Java):**
import java.util.ArrayList;
public class Solution {
public ArrayList<ArrayList<Integer> > FindContinuousSequence(int sum) {
//思路:双指针滑动窗口
ArrayList<ArrayList<Integer>> res=new ArrayList<>();
int low=1,high=2; //窗口的初始指针
int curSum=low+high; //当前窗口中元素之和
while(low<high && low<(sum+1)/2){ //至少连个元素,左指针追上右指针,或者左指针超过一半停止
if(curSum==sum){ //相等,说明找到一个序列
ArrayList<Integer> temp=new ArrayList<>();
for(int i=low;i<=high;i++)
temp.add(i);
res.add(temp);
curSum -= low;
++low;
}
else if(curSum>sum){ //当前和大于sum,左指针右移,减去一个小值
curSum -= low;
++low;
}else{ //当前和小于sum,右指针右移,加上一个值
++high;
curSum += high;
}
}
return res;
}
}
【剑指Offer】41、和为S的连续正数序列的更多相关文章
- 剑指Offer 41. 和为S的连续正数序列 (其他)
题目描述 小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100.但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数).没多久,他 ...
- [剑指Offer] 41.和为S的连续正数序列
题目描述 小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100.但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数).没多久,他 ...
- 【剑指Offer】和为S的连续正数序列 解题报告(Python)
[剑指Offer]和为S的连续正数序列 解题报告(Python) 标签(空格分隔): 剑指Offer 题目地址:https://www.nowcoder.com/ta/coding-interview ...
- 【剑指offer】和为定值的连续正数序列
.可是他并不满足于此,他在想到底有多少种连续的正数序列的和为100(至少包含两个数).没多久,他就得到还有一组连续正数和为100的序列:18,19,20,21,22.如今把问题交给你,你能不能也非常快 ...
- 《剑指offer》和为S的连续正数序列
本题来自<剑指offer> 反转链表 题目: 思路: C++ Code: Python Code: 总结:
- Go语言实现:【剑指offer】和为S的连续正数序列
该题目来源于牛客网<剑指offer>专题. 小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100.但是他并不满足于此,他在想究竟有多少种连续的正数 ...
- 剑指offer系列46---和为s的连续正数序列
[题目]输出所有和为S的连续正数序列.序列为:1,2,3,4,5,6,7,8................ * 序列内按照从小至大的顺序,序列间按照开始数字从小到大的顺序 package com.e ...
- 【剑指offer】 和为s的连续正数序列,C++实现
原创博文,转载请注明出处! # 题目 # 思路 设置两个辅助变量small和big,small表示序列的最小值,big表示序列的最大值.如果sum(small ~ big) > s,则增大sma ...
- 【剑指offer】和为S的连续正数序列
题目描述 小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100.但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数).没多久,他 ...
- 剑指offer:和为S的连续正数序列
题目描述: 小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100.但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数).没多久, ...
随机推荐
- 【Todo】Java TreeSet学习 & ceiling,floor
参考 http://www.yiibai.com/java/util/java_util_treeset.html 另,用Java的TreeSet的ceiling可以模拟upper_bound(获得更 ...
- 网络基础篇(一)--TCP/IP协议族
TCP/IP协议族是一个分层,多协议通信体系. 1 TCP/IP协议族体系结构 TCP/IP协议族自底而上分为四层: 数据链路层, 网络层, 传输层和应用层. 1.1 数据链路层 实现网卡接口的网络驱 ...
- DSP、Media、AdExchanger之间的关系及交互流程
广告商,如以下的樱花日语,淘宝卖家.其须要推广自己的产品. Zampdsp(晶赞) 是DSP平台.其与非常多广告商合作,广告商在平台上公布广告创意,并托付平台代为投放. tanx.com 是adExc ...
- Swift基本常识点
import Foundation // 单行注释 // 多行注释(支持嵌套,OC是不支持的) // 常量let,初始化之后就不可改变. // 常量的具体类型可以自动识别,等号后面是什么类型,它就是什 ...
- Android 绘制圆形图片
经常在项目中,会遇到使用圆形头像. 然而图片往往不是圆形的,我们须要对图片进行处理.以达到圆形图片的效果.这里.我总结了一下经常使用的android圆形图片的绘制的方法. 主要有以下几种方式:1.画布 ...
- cocos2dx编译安卓版本号查看C++错误
首先,在Mac以下相关软件路径,打开"终端",然后输入 pico .bash_profile 回车 export COCOS2DX_ROOT=/Users/bpmacmini0 ...
- jenkins集成钉钉
1.创建通知人群组,添加机器人 2.2.获取自定义机器人webhook 3.jenkins 安装"Dingding[钉钉] Plugin"插件: 4.插件安装完成后,创建/修改任务 ...
- phoenixframe自己主动化測试平台对div弹出框(如弹出的div登陆框)的处理
package org.phoenix.cases; import java.util.LinkedList; import org.phoenix.action.WebElementActionPr ...
- Codeforces Round #281 (Div. 2) C. Vasya and Basketball 排序
C. Vasya and Basketball Vasya follows a basketball game and marks the distances from which each te ...
- 针对深度学习(神经网络)的AI框架调研
针对深度学习(神经网络)的AI框架调研 在我们的AI安全引擎中未来会使用深度学习(神经网络),后续将引入AI芯片,因此重点看了下业界AI芯片厂商和对应芯片的AI框架,包括Intel(MKL CPU). ...