题目解析:

  题目是小明算数,这里不赘述!->题目链接<-
  看到这道题目的可以马上想到等差数列,这个题目可以换一种说法就是求有多少个等差数列的和为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的连续正数序列(双指针详解)相关推荐

  1. 剑指offer面试题57 - II. 和为s的连续正数序列(双指针)(滑动窗口)

    题目描述 输入一个正整数 target ,输出所有和为 target 的连续正整数序列(至少含有两个数). 序列内的数字由小到大排列,不同序列按照首个数字从小到大排列. 思路 详见链接 代码 clas ...

  2. LeetCode Algorithm 剑指 Offer 57 - II. 和为s的连续正数序列

    剑指 Offer 57 - II. 和为s的连续正数序列 Ideas 区间问题首先想到用双指针. 因为这题没有给定数组,其实相当于就是一个从1到target的数组,然后直接套双指针的模板就可以了. 双 ...

  3. 【LeetCode】剑指 Offer 57 - II. 和为s的连续正数序列

    [LeetCode]剑指 Offer 57 - II. 和为s的连续正数序列 文章目录 [LeetCode]剑指 Offer 57 - II. 和为s的连续正数序列 一.求和公式 二.滑动窗口(双指针 ...

  4. 剑指Offer之和为S的连续正数序列

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

  5. 和为S的连续正数序列(数学技巧,事半功倍)

    和为S的连续正数序列 题目描述 题目分析 双指针/滑动窗口法 C++代码 python代码 纯数学技巧法   数学的基础在算法中的用处大概就是对数字的敏感性了,如果能找到数字的规律,在求解数字的时候往 ...

  6. 和为s的连续正数序列java_剑指Offer41:和为S的连续正数序列(Java)

    思路分析: 在左端建一个窗口[L,R],从左滑倒右.当[L,R]之间的数加起来等于sum,保存起来:若小于sum,则R向右移动:若大于sum,则L向右移动. 题目描述: 小明很喜欢数学,有一天他在做数 ...

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

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

  8. 41.和为s的两个数字 VS 和为s的连续正数序列

    为什么80%的码农都做不了架构师?>>>    题目一:输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们的和正好是s.如果有多对数字的和等于s,输出任意一对即可.   ...

  9. 和为s的两个数字与和为s的连续正数序列

    题目一:输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们的和正好是s.如果有多对数字的和等于s,则输出任意一对即可. 分析:选择数组的两端,将其相加,然后与s比较,如果比s大,则将指向 ...

  10. 【剑指offer-Java版】41和为s的两个数字VS和为s的连续正数序列

    和为S的两个数字以及和为S的连续正数序列:输入是一个递增排序的数组,查找其中一对满足和为S的数,输出.如果有多对,输出其中一对 public void FindNumbersWithSum(int n ...

最新文章

  1. 谷歌迂回入华:Waymo无人车抢先进驻上海!
  2. linux命令join与paste
  3. 实用ExtJS教程100例-006:ExtJS中Window的用法示例
  4. 课后作业-结对编程项目总结
  5. Python可视化中的Matplotlib(6.散点图以及详细参数、为图形添加文字、注释、箭头以及它们的参数)
  6. 【Linux系统编程应用】Linux音频编程实战(一)
  7. java实验_Java实验报告(实验一)
  8. php安装mongo扩展,php安装mongo扩展和mongodb扩展
  9. logstash采集中文乱码
  10. 2013第44周日小结
  11. Unicode 字符编码
  12. ssm-学子商城-项目第五天
  13. 计算机虚拟技术有那么难吗,价值在哪里?
  14. 斐讯k3c V1.7D frp升级
  15. FastStone Capture 下载
  16. charles安装免费版
  17. 硅谷的工作狂文化在冠状病毒的压力下变化-苹果,谷歌,Facebook,LinkedIn和优步推出了新的在家工作政策
  18. Android JSON:Gson,FastJson解析库的使用和对比分析(1)
  19. STM32USB鼠标+键盘串口控制
  20. SPSS(十九)SPSS之时间序列模型(图文+数据集)

热门文章

  1. 灵活强大的构建系统Gradle
  2. 笔记:python设计模式
  3. MongoDB limit 选取 skip跳过 sort排序 方法
  4. Sass基础知识及语法
  5. SQL基础--同义词
  6. IE中window的模态框与返回值
  7. javascript 学习笔记(一)
  8. centos安装--两张光盘
  9. 文字滚动的另一方法 拆分文字来做到文字滚动
  10. WP7技巧 扩展【共享...】按钮