为什么80%的码农都做不了架构师?>>>   

题目一:输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们的和正好是s。如果有多对数字的和等于s,输出任意一对即可。

  思路:定义两个指针,一个放在头部,一个放在尾部,因为是有序的。所以当两个指针所指的数的和大于s时,尾指针向前移,和小于s时,头指针向后移。

#include<iostream>
using namespace std;bool FindNumbersWithSum(int data[], int length, int sum, int* num1, int* num2)
{bool found = false;if (length < 1 || num1 == NULL || num2 == NULL){return found;}int behind = length - 1;int ahead = 0;while (behind > ahead){long long curSum = data[ahead] + data[behind];if (curSum == sum){*num1 = data[ahead];*num2 = data[behind];found = true;// cout << *num1 << " " << *num2 << endl;break;}else if (curSum > sum){behind--;}else{ahead++;}}return found;}void test()
{int data[] = {1, 2, 4, 7, 11};int num1, num2;bool result = FindNumbersWithSum(data, 5, 15, &num1, &num2);if (result){cout << num1 << " " << num2 << endl;}
}int main()
{test();return 0;
}

题目二:输入一个正数s,打印出所有和为s的连续正数序列(至少含有两个数)。例如输入15,由于1+2+3+4+5=4+5+6=7+8=15,所以打印出3个连续序列1-5、4-6和7-8。
 
  思路:设两个变量small和big,初始small=1,big=2,有如下几种情况:
  1.small + big < s:big++。会使这个序列变长,比如small=1,big=4,则它打印出来的1-4的值而不是1和4.

2.small + big > s:small++。会缩短序列。

3.small + big = s:打印该序列,并且big++。

#include<iostream>
using namespace std;void PrintContinuousSequence(int small, int big)
{for (int i = small; i <= big; i++){cout << i << " ";}cout << endl;
}void FindContinusSequence(int sum)
{if (sum < 3){return;}int small = 1;int big = 2;int middle = (1 + sum) / 2;int curSum = small + big;while (small < middle)  //  最小值应小于中间值{if (curSum == sum){PrintContinuousSequence(small, big);}while (curSum > sum && small < middle){curSum -= small;small++;if (curSum == sum){PrintContinuousSequence(small, big);}}big++;curSum += big;}}int main()
{FindContinusSequence(1000);return 0;
}

转载于:https://my.oschina.net/134596/blog/1806891

41.和为s的两个数字 VS 和为s的连续正数序列相关推荐

  1. 【剑指offer-Java版】41和为s的两个数字VS和为s的连续正数序列

    和为S的两个数字以及和为S的连续正数序列:输入是一个递增排序的数组,查找其中一对满足和为S的数,输出.如果有多对,输出其中一对 public void FindNumbersWithSum(int n ...

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

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

  3. 和为s的两个数字与和为s的连续正数序列

    题目一:输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们的和正好是s.如果有多对数字的和等于s,则输出任意一对即可. 分析:选择数组的两端,将其相加,然后与s比较,如果比s大,则将指向 ...

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

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

  5. 【剑指offer{40-44}】和为S的连续正数序列、和为S的两个数字、左旋转字符串、翻转单词顺序列、扑克牌顺子

    文章目录 和为S的连续正数序列 题目描述 C++代码 和为S的两个数字 题目描述 C++代码 左旋转字符串 题目描述 C++代码 翻转单词顺序列 题目描述 C++代码 扑克牌顺子 题目描述 C++代码 ...

  6. python怎样连续输入两个数字_在python中生成连续的数字,同时输入不变

    显而易见的是将give变成一个对象而不是一个函数.*任何对象都可以通过定义^{}方法来调用.在 当我们在做的时候,你的代码可以简化很多,所以让我们这样做吧.在class Giver(object): ...

  7. 【面试题41】和为s的两个数字VS和为s的连续整数序列

    [题目描述] 输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得他们的和正好是s.如果有多对数字的和等于s,输出任意一队即可. [解决方案] 设置前后指针,根据所指数字的和来移动前后指针,直 ...

  8. 《剑指offer》-- 和为S的连续整数序列、和为S的两个数字、左旋转字符串、翻转单词顺序列

    一.和为S的连续整数序列: 1.题目: 小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100.但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100 ...

  9. 数据结构与算法--有序数组中找出和为s的两个数字

    有序数组中找和为s的两个数字 题目:输入一个递增排序的数组array, 和一个数字s, 在数组中找出两个数,使得这两个数的和是s,如果有多对,输出一对即可. 最简单方案 双循环,每次获取一个数据,和数 ...

最新文章

  1. 08、MySQL—字符串型
  2. Linux系统下安装rz/sz命令及使用说明
  3. 配置 Windows 环境变量的方法
  4. 产品经理在早期如何快速学习?
  5. python的with关键字
  6. 织梦自定义图片字段和缩略图一样_织梦图片集模型自定义图片字段调用
  7. 如何把meshlab中的圆环去掉_MeshLab中配准点云
  8. ubuntu16.04下出现登陆不进去
  9. Transformer的学习笔记
  10. css画饼状图圆形,CSS样式圆形饼图百分比
  11. oracle excel导入卡死 新解决办法
  12. 操作系统中的进程调度策略有哪几种
  13. 使用ffmpeg做直播推流例子
  14. visio如何关闭预览时的缩略图
  15. 【已解决】树莓派新系统连接vcn后无任务栏如何解决?
  16. 【机器学习】——梯度下降法的收敛性证明(详解)
  17. ICMP协议(网际控制报文协议)
  18. python 判断是否为数字(整型、浮点型),Python中判断输入是否为数字的实现代码
  19. npm下载什么都报错ERRO -4048
  20. RDO和VB数据库编程

热门文章

  1. 用户体验已成过去时 AI要从公民乃至社会的角度去思考问题
  2. 联通、华为《5G室内覆盖》白皮书!
  3. 可交互的对抗网络如何增强人类创造力?
  4. 《人工智能标准化白皮书(2018版)》发布|附下载
  5. GAN还有这种操作!谷歌大脑和X实验室利用模拟条件和域适应提高机器抓取效率(附论文)
  6. 中国首篇Science机器人子刊!北航软体机器人实验室四年成果登上封面长篇
  7. 库克喜提 8 亿年终奖,2020 年整体薪酬增长 28%
  8. 漫画:毕昇 JDK,重现了 “活字印刷术” 的传奇
  9. 【springboot】【redis】springboot+redis实现发布订阅功能,实现redis的消息队列的功能...
  10. iOS NSString中实用的方法