剑指offer——面试题41:和为S的连续整数序列

Solution1:我的答案

基本思路是根据等差数列的前n项和推导出首项与项数的关系,设首项为a1a1a_1,项数为kkk,和为S" role="presentation" style="position: relative;">SSS,则有

S=(a1+a1+k−1)k2S=(a1+a1+k−1)k2

S=\frac{(a_1+a_1+k-1)k}{2}

a1=2S+k−k22ka1=2S+k−k22k

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的连续整数序列相关推荐

  1. [剑指offer]面试题41:和为s的两个数字VS和为s的连续正数序列

    面试题41:和为s的两个数字VS和为s的连续正数序列 题目一:输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们的和正好是s.如果有多对数字的和等于s,输出任意一对即可. 代码如下: b ...

  2. 剑指offer面试题[41]-和为s的两个数VS和为s的连续正数序列

    题目描述 题目1: 输入一个递增排序的数组和一个数字S,在数组中查找两个数,是的他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的. 输出描述: 对应每个测试案例,输出两个数,小的先输 ...

  3. 剑指offer面试题41. 数据流中的中位数(二分查找)

    题目描述 如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值.如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值. 例 ...

  4. 剑指offer 面试题三 找出数组中重复的数字

    1 import org.junit.Test; 2 3 import java.util.Arrays; 4 import java.util.HashSet; 5 6 public class D ...

  5. 【剑指Offer面试题】 九度OJ1510:替换空格

    c/c++ 中的字符串以"\0"作为结尾符.这样每一个字符串都有一个额外字符的开销. 以下代码将造成内存越界. char str[10]; strcpy(str, "01 ...

  6. [剑指offer]面试题第[68-2]题[Leetcode][第236题][JAVA][二叉搜索树的最近公共祖先][递归]

    [问题描述][中等] 235/68-1 搜索二叉树 236/68-2 二叉树 [解答思路] 递归 时间复杂度:O(N) 空间复杂度:O(N) 情况 1. , 2. , 3. , 4. 的展开写法如下. ...

  7. [剑指offer]面试题第[57]题[Leetcode][第167题][JAVA][和为s的两个数字][两数之和][HashSet][二分][双指针]

    [剑指offer]面试题第[57]题[Leetcode][第167题][第1题] 有序无序之分 题目输出不同之分 以下解法按照[剑指offer]面试题第[57]题进行题解 [问题描述][简单] 输入一 ...

  8. 两个数组中对应的下标的值合成一个新的数组_剑指 offer 面试题精选图解 03 . 数组中重复的数字

    今天分享的题目来源于 LeetCode 上的剑指 Offer 系列 面试题03. 数组中重复的数字. 题目链接:https://leetcode-cn.com/problems/shu-zu-zhon ...

  9. 剑指offer面试题[64]-数据流中的中位数

    题目描述 如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值.如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值. 分 ...

最新文章

  1. 可能是堆被损坏,这也说明 XX.exe 中或它所加载的任何 DLL 中有 bug
  2. 七、深入JavaScript的DOM(三)
  3. 顺序链表,动态数组实现
  4. 国庆通知:地球不爆炸,CSDN 不放假!
  5. 东芝出售西屋电气在即
  6. Sublime_SublimeServer
  7. Tyvj P1065 津津的储蓄计划
  8. SQLHelp sql数据库的DAL
  9. Android 使用Fragment,ViewPagerIndicator 制作csdn app主要框架
  10. C语言函数 思维导图
  11. html期末作业代码网页设计 我的家乡网站设计——我的家乡-四川成都(4页) HTML+CSS+JavaScript
  12. php 深度验证18位身份证是否正确,并获取地址,出生日期(时间戳),性别。
  13. php tp6 错误接管分析,ThinkPHP5 异常接管
  14. PINN内嵌物理知识神经网络投稿期刊总结
  15. Multi-Agent Graph Convolutional Reinforcement Learning for Dynamic Electric Vehicle Charging Pricing
  16. android sutdio导入源码教程,《AndroidStudio导入安卓源码-idegen》---可方便查看安卓源代码...
  17. VisualDrag低代码拖拽模板
  18. EC预报相关资料整理分享
  19. java版 SpringCloud 之Eclipse 教程
  20. 欧姆龙PLC程序大型程序NJ系列 ST语言EtherCat总线控制24个伺服轴大型程序电池生产线

热门文章

  1. 数据导出到excel文件给客户端下载的几种方法
  2. drools规则拼接_Drools-规则层次结构和条件执行
  3. 有效数据包含额外数据_设置数据有效性的一些技巧
  4. android gps导航省电,具有省电功能的gps导航系统及其省电方法
  5. php7与mysql相关配置_PHP7连接mysql,文件配置问题
  6. python将对象放入列表根据某个属性排升序_python实现对象列表根据某个属性排序的方法详解...
  7. 坚果云android功能,坚果云发布Android新版本 离线收藏大增强
  8. 网易云api接口_网易云音乐你喜欢吗?你自己也可以做一个
  9. java map 集合实例_Java之集合类【HashMap】【入门版,实例解析】
  10. java map中套map_Java Map – Java中的Map