《剑指offer》:[41-1]和为S的连续整数序列
2016-06-19 16:23
274 查看
输入一个正数S,打印出所有和为S的连续正数序列(至少含有两个数)。例如输入15,由于1+2+3+4+5=4+5+6=7+8=15,所以结果打印出连续序列:1-5,4-6,7-8这三个序列.
方案一:时间复杂度为O(N*N)。通过循环来求解。效率较低,不在多赘述。
方案二:有了【41】的的经验方法后,我们可以用这样一种方法来得到连续整数序列。时间复杂度为O(N)。
我们以S=9为例来分析其过程如下:
具体实现代码如下:
运行结果如下:
通常我们是通过循环来求解,但是由于里面有大量的计算步骤属于重复,所以我么通过利用上次求解的结果再进行下一次的求解,这样提高了算法的效率。
方案一:时间复杂度为O(N*N)。通过循环来求解。效率较低,不在多赘述。
方案二:有了【41】的的经验方法后,我们可以用这样一种方法来得到连续整数序列。时间复杂度为O(N)。
我们以S=9为例来分析其过程如下:
具体实现代码如下:
#include <iostream> using namespace std; void PrintSequence(int start,int end) { cout<<"Sequence: "; for(int i=start;i<=end;i++) cout<<i<<" "; cout<<endl; } void FindSequenceNum(int sum) { if(sum<3) return ; int start=1; int end=2; int mid=(1+sum)/2; int CurSum=start+end; while(start<mid) { if(CurSum==sum) PrintSequence(start,end); while(CurSum>sum && start<end) { CurSum-=start; start++; if(CurSum==sum) PrintSequence(start,end); } end++; CurSum+=end; } } int main() { FindSequenceNum(15); system("pause"); return 0; }
运行结果如下:
通常我们是通过循环来求解,但是由于里面有大量的计算步骤属于重复,所以我么通过利用上次求解的结果再进行下一次的求解,这样提高了算法的效率。
相关文章推荐
- 通过HtmlEmail 发送邮件
- CSS(3) 字体
- Javascript面向对象编程(三):非构造函数的继承
- 《剑指offer》:[41]数组中和为S的两个数
- Javascript面向对象编程(二):构造函数的继承
- Javascript 面向对象编程(一):封装
- React Native es6继承(Component例子)
- 《剑指offer》:[40]数组中只出现一次的数字
- 精通css 高级web标准解决方案——可视化格式模型-盒模型
- jquery判断checkbox是否选中及改变checkbox状态
- jsp
- js oop写法小例子
- CSS(3) Text(文本)
- JSON 数据格式
- CSS3的REM设置字体大小
- 《剑指offer》:[39-1]判断是否为平衡二叉树
- CSS(3) Background(背景)
- 《剑指offer》:[39]求解二叉树的深度
- JavaScript 删除数组的某些元素的问题
- indexedDB bootstrap angularjs 前端 MVC Demo