剑指offer——面试题41:和为S的连续整数序列
剑指offer——面试题41:和为S的连续整数序列
Solution1:我的答案
基本思路是根据等差数列的前n项和推导出首项与项数的关系,设首项为a1a1a_1,项数为kkk,和为S" role="presentation" style="position: relative;">SSS,则有
S=\frac{(a_1+a_1+k-1)k}{2}
a_1=\frac{2S+k-k^2}{2k}
对 kkk从1到S" role="presentation" style="position: relative;">SSS遍历,找到所有的答案。
class Solution {
public:vector<vector<int> > FindContinuousSequence(int sum) {vector<vector<int> > res;vector<int> temp;int a = 0, start = 0;for(int k = 2; k <= sum; k++){a = 2 * sum + k - k * k;if( a > 0 && a % (2 * k) == 0) {for(int i = a/(2*k); i <= a/(2*k) + k - 1; i++)temp.push_back(i);res.push_back(temp);temp.clear();}}sort(res.begin(),res.end(),my_cmp);return res;}// 序列越长,开始的数字就越小啊!没毛病!static bool my_cmp(vector<int> a, vector<int> b) {if(a.size() >= b.size())return true;else return false;}
};
意外收获:
因为要求序列按首个数字从小到大排列,所以需对res中的vector按长度从长到短排序,利用sort()函数可以定义自己的排序规则可以实现这一步。注意:在类内定义自己的比较函数时一定要声明为static的,否则会报错。
关于sort()函数的用法,参加该博客:
https://www.cnblogs.com/nihow/p/4297102.html
C++中sort的比较函数写法,有需要的朋友可以参考下。
定义排序函数:
方法1:声明外部比较函数
bool Less(const Student& s1, const Student& s2) {return s1.name < s2.name; //从小到大排序
}
std::sort(sutVector.begin(), stuVector.end(), Less);
注意:比较函数必须写在类外部(全局区域)或声明为静态函数
当comp作为类的成员函数时,默认拥有一个this指针,这样和sort函数所需要使用的排序函数类型不一样。
否则,会出现错误.
方法2:重载类的比较运算符
bool operator<(const Student& s1, const Student& s2) {return s1.name < s2.name; //从小到大排序
}
std::sort(sutVector.begin(), stuVector.end());
方法3:声明比较类
struct Less {bool operator()(const Student& s1, const Student& s2) {return s1.name < s2.name; //从小到大排序}
};
std::sort(sutVector.begin(), stuVector.end(), Less());
剑指offer——面试题41:和为S的连续整数序列相关推荐
- [剑指offer]面试题41:和为s的两个数字VS和为s的连续正数序列
面试题41:和为s的两个数字VS和为s的连续正数序列 题目一:输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们的和正好是s.如果有多对数字的和等于s,输出任意一对即可. 代码如下: b ...
- 剑指offer面试题[41]-和为s的两个数VS和为s的连续正数序列
题目描述 题目1: 输入一个递增排序的数组和一个数字S,在数组中查找两个数,是的他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的. 输出描述: 对应每个测试案例,输出两个数,小的先输 ...
- 剑指offer面试题41. 数据流中的中位数(二分查找)
题目描述 如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值.如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值. 例 ...
- 剑指offer 面试题三 找出数组中重复的数字
1 import org.junit.Test; 2 3 import java.util.Arrays; 4 import java.util.HashSet; 5 6 public class D ...
- 【剑指Offer面试题】 九度OJ1510:替换空格
c/c++ 中的字符串以"\0"作为结尾符.这样每一个字符串都有一个额外字符的开销. 以下代码将造成内存越界. char str[10]; strcpy(str, "01 ...
- [剑指offer]面试题第[68-2]题[Leetcode][第236题][JAVA][二叉搜索树的最近公共祖先][递归]
[问题描述][中等] 235/68-1 搜索二叉树 236/68-2 二叉树 [解答思路] 递归 时间复杂度:O(N) 空间复杂度:O(N) 情况 1. , 2. , 3. , 4. 的展开写法如下. ...
- [剑指offer]面试题第[57]题[Leetcode][第167题][JAVA][和为s的两个数字][两数之和][HashSet][二分][双指针]
[剑指offer]面试题第[57]题[Leetcode][第167题][第1题] 有序无序之分 题目输出不同之分 以下解法按照[剑指offer]面试题第[57]题进行题解 [问题描述][简单] 输入一 ...
- 两个数组中对应的下标的值合成一个新的数组_剑指 offer 面试题精选图解 03 . 数组中重复的数字
今天分享的题目来源于 LeetCode 上的剑指 Offer 系列 面试题03. 数组中重复的数字. 题目链接:https://leetcode-cn.com/problems/shu-zu-zhon ...
- 剑指offer面试题[64]-数据流中的中位数
题目描述 如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值.如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值. 分 ...
最新文章
- 可能是堆被损坏,这也说明 XX.exe 中或它所加载的任何 DLL 中有 bug
- 七、深入JavaScript的DOM(三)
- 顺序链表,动态数组实现
- 国庆通知:地球不爆炸,CSDN 不放假!
- 东芝出售西屋电气在即
- Sublime_SublimeServer
- Tyvj P1065 津津的储蓄计划
- SQLHelp sql数据库的DAL
- Android 使用Fragment,ViewPagerIndicator 制作csdn app主要框架
- C语言函数 思维导图
- html期末作业代码网页设计 我的家乡网站设计——我的家乡-四川成都(4页) HTML+CSS+JavaScript
- php 深度验证18位身份证是否正确,并获取地址,出生日期(时间戳),性别。
- php tp6 错误接管分析,ThinkPHP5 异常接管
- PINN内嵌物理知识神经网络投稿期刊总结
- Multi-Agent Graph Convolutional Reinforcement Learning for Dynamic Electric Vehicle Charging Pricing
- android sutdio导入源码教程,《AndroidStudio导入安卓源码-idegen》---可方便查看安卓源代码...
- VisualDrag低代码拖拽模板
- EC预报相关资料整理分享
- java版 SpringCloud 之Eclipse 教程
- 欧姆龙PLC程序大型程序NJ系列 ST语言EtherCat总线控制24个伺服轴大型程序电池生产线
热门文章
- 数据导出到excel文件给客户端下载的几种方法
- drools规则拼接_Drools-规则层次结构和条件执行
- 有效数据包含额外数据_设置数据有效性的一些技巧
- android gps导航省电,具有省电功能的gps导航系统及其省电方法
- php7与mysql相关配置_PHP7连接mysql,文件配置问题
- python将对象放入列表根据某个属性排升序_python实现对象列表根据某个属性排序的方法详解...
- 坚果云android功能,坚果云发布Android新版本 离线收藏大增强
- 网易云api接口_网易云音乐你喜欢吗?你自己也可以做一个
- java map 集合实例_Java之集合类【HashMap】【入门版,实例解析】
- java map中套map_Java Map – Java中的Map