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

代码如下:

bool FindNumbersWithSum(int data[], int length, int sum, int *num1, int *num2)
{bool found = false;if (length < 1 || num1 == nullptr || num2 == nullptr) return found;int ahead = length - 1;int behind = 0;while (ahead > behind){long long curSum = data[ahead] + data[behind];if (curSum == sum){*num1 = data[behind];*num2 = data[ahead];found = true;break;}else if (curSum > sum) ahead--;else behind++;}return found;
}

测试用例:
● 功能测试(数组中存在和为s的两个数,数组中不存在和为s的两个数)
● 特殊输入测试(表示数组的指针为NULL指针)

题目二:输入一个正数s,打印出所有和为s的连续正数序列(至少含有两个数)。例如输入15,由于1+2+3+4+5=4+5+6=7+8=15,所以结果打印出3个连续序列1~5、4~6和7~8。

代码如下:

void FindContinousSequence(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) PrintContinousSequence(small, big);while (curSum > sum && small < middle){curSum -= small;small++;if (curSum == sum) PrintContinousSequence(small, big);}big++;curSum += big;}
}void PrintContinousSequence(int small, int big)
{for (int i = small; i <= big; i++) cout << i << " ";cout << endl;
}

这段代码用到了一个小技巧:
通常我们可以用循环求一个连续序列的和,但考虑到每一次操作之后的序列和操作之前的序列相比大部分数字都是一样的,只是增加或者减少了一个数字,因此我们可以在前一个序列的和的基础上求操作之后的序列的和。这样可以减少很多不必要的运算,从而提高代码的效率。

测试用例:
● 功能测试(存在和为 s 的连续序列,如 9、100 等;不存在和为 s的连续序列,如4、0)。
● 边界值测试(连续序列的最小和3)
本题考点:
● 考查思考复杂问题的思维能力。应聘者如果能够通过一两个具体的例子找到规律,解决这个问题就容易多了。
● 考查知识迁移的能力。应聘者面对第二个问题的时候,能不能把解决第一个问题的思路应用到新的题目上,是面试官考查知识迁移能力的重要指标。

[剑指offer]面试题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的连续正数序列

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

  3. 剑指Offer - 面试题57. 和为s的两个数字(双指针)

    1. 题目 输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们的和正好是s.如果有多对数字的和等于s,则输出任意一对即可. 示例 1: 输入:nums = [2,7,11,15], ta ...

  4. 剑指offer面试题57. 和为s的两个数字(双指针)

    题目描述 输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们的和正好是s.如果有多对数字的和等于s,则输出任意一对即可. 思路 详见链接 代码 class Solution:def tw ...

  5. 41.和为s的两个数字 VS 和为s的连续正数序列

    为什么80%的码农都做不了架构师?>>>    题目一:输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们的和正好是s.如果有多对数字的和等于s,输出任意一对即可.   ...

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

    剑指offer--面试题41:和为S的连续整数序列 Solution1:我的答案 基本思路是根据等差数列的前n项和推导出首项与项数的关系,设首项为a1a1a_1,项数为kkk,和为S" ro ...

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

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

  8. 剑指offer——面试题45:圆圈中最后剩下的数字(孩子们的游戏)

    剑指offer--面试题45:圆圈中最后剩下的数字(孩子们的游戏) Solution1: 当年第一遍做时,自己想的垃圾算法 class Solution { public:int LastRemain ...

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

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

最新文章

  1. R语言Kolmogorov-Smirnov假设检验(正态性检验):检验数据的正态性
  2. Qt 可编辑的树模型(Tree Model)的一个实例
  3. oracle处理回车换行符
  4. MVC与MVVM的区别
  5. 信息学奥赛一本通(1061:求整数的和与均值)
  6. 【读书笔记】 —— 公平与正义
  7. 通过url直接访问项目图片
  8. 如何打开剪贴板查看器?
  9. mt6735通用recovery_mt6735刷机包下载
  10. 一文搞定卷积神经网络——从原理到应用
  11. 数学模板-BSGSEXBSGS
  12. Windows Audio无法启动 错误 0x80070005:拒绝访问
  13. 系列之FIRST——跑酷小游戏:关卡+BOSS+技能版
  14. circos 可视化手册- text 篇
  15. java后台学习资源汇总
  16. Liam的操作系统学习历程(一):xv6 homework 9 Barriers
  17. 3种常用系统制作ubuntu U盘安装盘
  18. nbu客户端卸载_NBU客户端安装失败
  19. 邮箱-Mailbox
  20. VDS33矩阵怎么玩

热门文章

  1. 【计算机图形学】实验:C#.net环境下采用GDI+图形特技处理案例教程
  2. linux c之使用共享内存实现进程间通信
  3. d类功放芯片_应用于无滤波级D类音频功放的新型死区时间控制系统
  4. 带圈汉字 在线生成_手写签名在线生成器-手写签名在线生成器可复制
  5. 直男约会能有多奇葩​?
  6. 25岁男生要有多少存款才能让女友满意?
  7. 史上最硬核文科生,擅长解决数学难题,却视考试成为终生噩梦
  8. 人生苦短,我用Python!
  9. 967c语言程序设计是什么,2018年湖南师范大学数学与计算机科学院967C语言程序设计和数据结构[专硕]之C程序设计考研核心题库...
  10. 修改mongodb最大查询数_WebFlux系列(十二)MongoDB应用,新增、修改、查询、删除