第一个题,我想到的思路是一个个找的方法。看书上是设置两个指针然后两个指针一起走。确实这种时间复杂度更低。本来我看到有多组输出乘积最小的我还写了一个专门判断哪一对乘积最小的代码。看到别人证明说找到的第一对就是最小的,所以就没放。我发现这种使用两个指针从两端走的题目真的很多,以后遇见题可以往这方面考虑。

 1 class Solution {
 2 public:
 3     vector<int> FindNumbersWithSum(vector<int> array, int sum)
 4     {
 5         vector<int> re;
 6         if (array.empty() || sum == 0)
 7             return re;
 8         for (auto b = array.begin(), e = array.end() - 1; b< e;)
 9         {
10             if (*b + *e == sum)
11             {
12                 re.push_back(*b);
13                 re.push_back(*e);
14                 break;
15             }
16             else {
17                 if (*b + *e < sum)
18                     ++b;
19                 else
20                     --e;
21             }
22         }
23         return re;
24     }
25 };

第二个题,取连续的正数序列和为S。去两个数分别为small和big代表所取的序列的两端。开始设置为small=1,big=2。对序列内的数字求和,如果等于S就放进vector,如果小于s,求将big++,增加一个数字。如果大于S,就small++,删掉一个小的数字。

 1 class Solution
 2 {
 3 public:
 4     vector<vector<int> > FindContinuousSequence(int sum)
 5     {
 6         vector<vector<int> > re;
 7         if (sum <= 0)
 8             return re;
 9
10         for (int i = 1, j = 2; j <= sum / 2 + 1;)
11         {
12             int s = 0;
13             for (int k = i; k <= j; k++)
14                 s = s + k;
15             if (s == sum)
16             {
17                 vector<int> tem;
18                 for (int k = i; k <= j; k++)
19                     tem.push_back(k);
20                 re.push_back(tem);
21                 j++;//记住在for循环里无论哪一种情况都要对变量更新
22             }
23             else
24             {
25                 if (s < sum)
26                 {
27                     j++;
28                 }
29                 else
30                 {
31                     i++;
32                 }
33             }
34         }
35         return re;
36     }
37 };

转载于:https://www.cnblogs.com/neverland0718/p/11208595.html

剑指offer系列33:和为S的两个数字VS何为S的连续正数相关推荐

  1. 《剑指offer》—— 42. 和为S的两个数字(Java)

    推荐 完整<剑指Offer>算法题解析系列请点击

  2. 剑指offer系列-03.数组中的重复数字

    剑指offer系列第03题.数组中的重复数字 找出数组中重复的数字.在一个长度为 n 的数组 nums 里的所有数字都在 0-n-1 的范围内. 数组中某些数字是重复的,但不知道有几个数字重复了,也不 ...

  3. leetcode 打印_剑指 Offer 总结 - leetcode 剑指offer系列

    剑指 Offer 系列完结撒花!! 本篇文章是对整个系列的精华总结, 对系列的每篇文章进行了分类, 并用一句话概括每道题的思路, 方便大家理解和记忆, 当然也包含原文完整链接供大家参考 总的来说, 写 ...

  4. 在要求输入数字处找到非数字字符_剑指 Offer 67. 把字符串转换成整数 leetcode 剑指offer系列...

    点击专辑上方"蓝字"关注我吧 题目难度: 中等 原题链接[1] 今天继续更新剑指 offer 系列, 老样子晚上 6 点 45 分准时更新公众号 每日精选算法题, 大家记得关注哦~ ...

  5. 剑指offer python实现_剑指offer系列python实现 日更(三)

    今天来讲讲斐波那契数列和它的孩子们~先讲个冷笑话:今天来一盘斐波那契炒饭,它等于昨天的炒饭加上前天的炒饭 ‍ 7.斐波那契数列 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第 ...

  6. 数组中其余的排除_[leetcode 剑指offer系列] 面试题04. 二维数组中的查找

    题目难度: 简单 原题链接 今天继续更新剑指 offer 系列, 这道题的优化空间非常大, 个人感觉很适合作为面试题, 值得一做. 大家在我的公众号"每日精选算法题"中的聊天框中回 ...

  7. 剑指offer系列-24.反转链表

    剑指offer系列第24题.反转链表 题目描述: 定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点. 示例:输入: 1->2->3->4->5->N ...

  8. 剑指offer系列-06.从尾到头打印链表

    剑指offer系列第06题.从尾到头打印链表 题目描述: 输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回). 示例 1:输入:head = [1,3,2] 输出:[2,3,1] /* ...

  9. 剑指offer系列-30.包含min函数的栈

    剑指offer系列第30题.包含min函数的栈 题目描述: 定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中, 调用 min.push 及 pop 的时间复杂度都是 ...

  10. 剑指offer系列-09.用两个栈设计队列

    剑指offer系列第09题.用两个栈设计队列 用两个栈实现一个队列.队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead , 分别完成在队列尾部插入整数和在队列头部删除整 ...

最新文章

  1. OpenStack 的单元测试
  2. blog error #include stream.h
  3. 基于EasyDSS流媒体服务器实现的直播流管理与鉴权的后台方案
  4. 算法练习题---回文数
  5. 拓端tecdat|R语言析因设计分析:线性模型中的对比
  6. Python学习笔记一(Python数据类型)
  7. Keepalived双主热备,实现nginx集群
  8. Qt 5.2.1 applications (32 bit) in CentOS (64 bit with gcc 4.8.2)
  9. 墨者学院—网络安全篇3
  10. Charles注册、破解(避免30分钟自动kill掉)
  11. amcharts php,分享四个amCharts使用中的问题研究
  12. Matlab数字图像的傅里叶变换(FFT)
  13. 特斯拉新款Model Y曝光 续航仅449公里
  14. 使用加速器可以提升获取Docker官方镜像的速度
  15. 经典面试题:翻转英文句子中单词的顺序
  16. 走进“开源SDR实验室” 一起玩转GNU Radio:信号功率测量
  17. [hqyj]day-9
  18. IT老齐_同城艺龙千亿级日志架构平台演进
  19. memoQ Webinar(入门级)预告
  20. linux使用nmtui命令,nmcli和nmtui命令杂记(示例代码)

热门文章

  1. 也乱弹Book.Save而引OO对话
  2. Action 和Func
  3. go -生成pb文件 -下
  4. java.util.ArrayList#add探索
  5. file watchers怎么默认打开_python默认字典defaultdict进阶
  6. JSP的自定义标签(四)之定义函数
  7. 【渝粤教育】国家开放大学2018年秋季 1174t水工钢筋混凝土结构(本) 参考试题
  8. 基于频繁增长树(FP-树)的频繁项集挖掘算法实现
  9. 23种设计模式(十四)接口隔离之代理模式
  10. 【浙江大学PAT真题练习乙级】1002 写出这个数(20分) 真题解析