剑指offer——65和为S的连续正数序列
2024-09-07 09:17:40
题目描述
小明很喜欢数学,有一天他在做数学作业时,要求计算出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;
}
};
最新文章
- android清除本应用里的各种数据的方法
- ios的链式编程笔记
- 深入理解JavaScript定时机制和定时器注意问题
- 更改appstore开发商名字
- 课程1&mdash;&mdash;数据类型和变量
- 11.cadence.通孔类封装创建[原创]
- 【转】Cocos2d-x 2.x CCSprite 灰白图的生成(利用shader设置)&mdash;&mdash;2013-08-27 21
- javascript之typeof、constructor、instanceof
- C# Hashtable 使用说明 以及 Hashtable和HashMap的区别
- Linux显示系统的诊断信息
- business expressions(二)
- 使用webpack打包vue工程
- Netty学习笔记(四) 简单的聊天室功能之服务端开发
- ubuntu16下用QT5实现对话框应用
- TensorFlow笔记之常见七个参数
- python多线程获取子线程任务返回值
- IIS 6 配置
- 学以致用八---centos7.2 安装vim8+支持python3
- VS2010/MFC编程入门之四十(文档、视图和框架:各对象之间的关系)
- org.apache.shiro.session.InvalidSessionException: java.lang.IllegalStateException: getAttribute: Session already invalidated] with root cause