和为S的连续正数序列(双指针详解)
题目解析:
题目是小明算数,这里不赘述!->题目链接<-
看到这道题目的可以马上想到等差数列,这个题目可以换一种说法就是求有多少个等差数列的和为sum,可以直接用公式计算,但是公式计算个人感觉有一些复杂,觉得使用双指针更好一些,类似于TCP中的滑动窗口,根据窗口中的数值的和来确定窗口的位置和宽度,大了就向右缩小窗口,小了就向右扩大窗口,相等了就向右缩小一个位置,继续之前的比较。当窗口缩小到没有了,说明窗口之后的等差数列的和都是大于sum的,就可以结束查找了。
图解思路:
代码解析:
说了这么多,大概代码也已经想出来了!
class Solution {public:vector<vector<int> > FindContinuousSequence(int sum) {//存放返回值vector<vector<int> >ret;int pRight = 2, pLeft = 1;while(pRight > pLeft){//计算窗口中数值的和int tmp = (pRight + pLeft)*(pRight-pLeft+1)/2;//如果窗口中的和比sum小,窗口向右扩大if(tmp < sum)pRight++;//如果窗口中的和比sum大,窗口向左缩小else if(tmp > sum)pLeft++;//否则窗口中的和与sum一样大,将窗口中的值保存到ret中else{vector<int> arr;for (int i = pLeft; i <= pRight; ++i){arr.push_back(i);}ret.push_back(arr);//这里强调要移动窗口的左边框,不能是窗口的右边框//因为右边的值较大,移动有边框可能会跳过一个符合条件的等差数列pLeft++;}}return ret;}
};
和为S的连续正数序列(双指针详解)相关推荐
- 剑指offer面试题57 - II. 和为s的连续正数序列(双指针)(滑动窗口)
题目描述 输入一个正整数 target ,输出所有和为 target 的连续正整数序列(至少含有两个数). 序列内的数字由小到大排列,不同序列按照首个数字从小到大排列. 思路 详见链接 代码 clas ...
- LeetCode Algorithm 剑指 Offer 57 - II. 和为s的连续正数序列
剑指 Offer 57 - II. 和为s的连续正数序列 Ideas 区间问题首先想到用双指针. 因为这题没有给定数组,其实相当于就是一个从1到target的数组,然后直接套双指针的模板就可以了. 双 ...
- 【LeetCode】剑指 Offer 57 - II. 和为s的连续正数序列
[LeetCode]剑指 Offer 57 - II. 和为s的连续正数序列 文章目录 [LeetCode]剑指 Offer 57 - II. 和为s的连续正数序列 一.求和公式 二.滑动窗口(双指针 ...
- 剑指Offer之和为S的连续正数序列
题目描述 小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100.但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数).没多久,他 ...
- 和为S的连续正数序列(数学技巧,事半功倍)
和为S的连续正数序列 题目描述 题目分析 双指针/滑动窗口法 C++代码 python代码 纯数学技巧法 数学的基础在算法中的用处大概就是对数字的敏感性了,如果能找到数字的规律,在求解数字的时候往 ...
- 和为s的连续正数序列java_剑指Offer41:和为S的连续正数序列(Java)
思路分析: 在左端建一个窗口[L,R],从左滑倒右.当[L,R]之间的数加起来等于sum,保存起来:若小于sum,则R向右移动:若大于sum,则L向右移动. 题目描述: 小明很喜欢数学,有一天他在做数 ...
- 剑指offer:和为S的连续正数序列
题目描述 小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100.但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数).没多久,他 ...
- 41.和为s的两个数字 VS 和为s的连续正数序列
为什么80%的码农都做不了架构师?>>> 题目一:输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们的和正好是s.如果有多对数字的和等于s,输出任意一对即可. ...
- 和为s的两个数字与和为s的连续正数序列
题目一:输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们的和正好是s.如果有多对数字的和等于s,则输出任意一对即可. 分析:选择数组的两端,将其相加,然后与s比较,如果比s大,则将指向 ...
- 【剑指offer-Java版】41和为s的两个数字VS和为s的连续正数序列
和为S的两个数字以及和为S的连续正数序列:输入是一个递增排序的数组,查找其中一对满足和为S的数,输出.如果有多对,输出其中一对 public void FindNumbersWithSum(int n ...
最新文章
- 谷歌迂回入华:Waymo无人车抢先进驻上海!
- linux命令join与paste
- 实用ExtJS教程100例-006:ExtJS中Window的用法示例
- 课后作业-结对编程项目总结
- Python可视化中的Matplotlib(6.散点图以及详细参数、为图形添加文字、注释、箭头以及它们的参数)
- 【Linux系统编程应用】Linux音频编程实战(一)
- java实验_Java实验报告(实验一)
- php安装mongo扩展,php安装mongo扩展和mongodb扩展
- logstash采集中文乱码
- 2013第44周日小结
- Unicode 字符编码
- ssm-学子商城-项目第五天
- 计算机虚拟技术有那么难吗,价值在哪里?
- 斐讯k3c V1.7D frp升级
- FastStone Capture 下载
- charles安装免费版
- 硅谷的工作狂文化在冠状病毒的压力下变化-苹果,谷歌,Facebook,LinkedIn和优步推出了新的在家工作政策
- Android JSON:Gson,FastJson解析库的使用和对比分析(1)
- STM32USB鼠标+键盘串口控制
- SPSS(十九)SPSS之时间序列模型(图文+数据集)