题目描述

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

输出描述:

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

题解:

第一种方法,找规律
第num开始,到num+n构成的序列和 == sum
么你会发现,则这些数全部减去(num-1)后构成序列 1,2,3,4,5,,,,n,而他们的和为n*(n+1)/2
以满足条件的序列必满足: n*(num-1) + n*(n+1)/2 == sum

第二种方法,滑动窗口
使用滑动窗口,和大了,则左指针右移,并吐出左数,和小了,则右指针右移,加上右数

 //第一种方法,找规律
//第num开始,到num+n构成的序列和 == sum
//么你会发现,则这些数全部减去(num-1)后构成序列 1,2,3,4,5,,,,n,而他们的和为n*(n+1)/2
//以满足条件的序列必满足: n*(num-1) + n*(n+1)/2 == sum
class Solution01 {
public:
vector<vector<int> > FindContinuousSequence(int sum) {
vector<vector<int> >res;
for (int i = ; i < sum; ++i)
{
int theta = ( * i - )*( * i - ) + * sum;
int gen = sqrt(theta);
if (gen*gen != theta)continue;
int a = ( - * i) + gen;
if (a % != )continue;
vector<int>temp;
for (int j = ; j < a / ; ++j)
temp.push_back(i + j);
res.push_back(temp);
}
return res;
}
}; //第二种方法,滑动窗口
//使用滑动窗口,和大了,则左指针右移,并吐出左数,和小了,则右指针右移,加上右数
class Solution {
public:
vector<vector<int> > FindContinuousSequence(int sum) {
if (sum < )return{};
vector<vector<int> >res;
int L = , R = , S = + ;
while (L < R && R < sum){
if (S == sum){
vector<int>temp;
for (int j = L; j <= R; ++j)
temp.push_back(j);
res.push_back(temp);
}
if (S >= sum) {
S -= L;
++L;
}
else {
++R;
S += R;
}
}
return res;
}
};

最新文章

  1. android清除本应用里的各种数据的方法
  2. ios的链式编程笔记
  3. 深入理解JavaScript定时机制和定时器注意问题
  4. 更改appstore开发商名字
  5. 课程1&mdash;&mdash;数据类型和变量
  6. 11.cadence.通孔类封装创建[原创]
  7. 【转】Cocos2d-x 2.x CCSprite 灰白图的生成(利用shader设置)&mdash;&mdash;2013-08-27 21
  8. javascript之typeof、constructor、instanceof
  9. C# Hashtable 使用说明 以及 Hashtable和HashMap的区别
  10. Linux显示系统的诊断信息
  11. business expressions(二)
  12. 使用webpack打包vue工程
  13. Netty学习笔记(四) 简单的聊天室功能之服务端开发
  14. ubuntu16下用QT5实现对话框应用
  15. TensorFlow笔记之常见七个参数
  16. python多线程获取子线程任务返回值
  17. IIS 6 配置
  18. 学以致用八---centos7.2 安装vim8+支持python3
  19. VS2010/MFC编程入门之四十(文档、视图和框架:各对象之间的关系)
  20. org.apache.shiro.session.InvalidSessionException: java.lang.IllegalStateException: getAttribute: Session already invalidated] with root cause

热门文章

  1. 实验吧关于隐写术的writeUp(二)
  2. eclispse指针变成十字型
  3. javsscript闭包的一种使用场景--沙箱
  4. Oracle高水位线(HWM)及性能优化
  5. Linux(一)—— Linux环境搭建
  6. Oracle查看有锁进程,删除锁
  7. IDEA如何import一个新的项目
  8. sum - 计算文件的校验和,以及文件占用的块数
  9. shell 符号的定义(一)
  10. 面试之加分项vue(没看懂,。。。。)