一,题目:输入一个已经按升序排序过的数组和一个数字,在数组中查找两个数,使得它们的和正好是输入的那个数字。要求时间复杂度是O(n)。如果有多对数字的和等于输入的数字,输出任意一对即可。例如输入数组1、2、4、7、11、15和数字15。由于4+11=15,因此输出4和11。

二,题目难点在于时间复杂度控制在O(n)

三,方法一

        1,分别从数组前,数组后向中间查找。直到前后相遇!!

        2,当前得到currentSum>sum说明:大的数太大(数组递增,后面的数太大)。应该将指向最后的标记向前挪动

        3,当前得到currentSum<sum说明:大的数太小(数组递增,前面的数太小)。应该将指向最后的标记向后挪动

        4,当前得到currentSum=sum说明:找到答案


#include <iostream.h> bool FindTwoNumbersWithSum(int data[],unsigned int length,int sum, int& num1,int& num2) { //num1,num2采用的是地址,如果方法内改变则改变的是调用实参的值 bool found = false; if(length < 1) return found; int begin = 0; int end = length - 1; while(end > begin) { long curSum = data[begin] + data[end]; if(curSum == sum) { num1 = data[begin]; num2 = data[end]; found = true; break; } else if(curSum > sum) end--; else begin++; } return found; } int main() { int x,y; int a[6]={1,2,4,7,11,15}; if(FindTwoNumbersWithSum(a,6,15,x,y) ) { cout<<x<<endl<<y<<endl; } return 0; } 方法二:假如

1,数组为:a={1、 2、  4、7、11、15 }

2,输入sum=15

3,用15减去a数组中每一个元素得到

b={14、13、11、8、4、0 }

4,a数组向右扫描

b数组向左扫描

5,如果a出现了和b一样的数,稍加判断,就能找出这俩个数来了。

转载于:https://www.cnblogs.com/JPAORM/archive/2012/01/10/2510046.html

【100题】第十四题(数组中找两个数使其和等于输入数)相关推荐

  1. 【编程题目】输入一个已经按升序排序过的数组和一个数字,在数组中查找两个数,使得它们的和正好是输入的那个数字。...

    第 14 题(数组): 题目:输入一个已经按升序排序过的数组和一个数字, 在数组中查找两个数,使得它们的和正好是输入的那个数字. 要求时间复杂度是 O(n).如果有多对数字的和等于输入的数字,输出任意 ...

  2. 求数组最大数,该数为数组中某两个数相加

    题目: 百度笔试:在一个正整数集合S中,找出一个最大数C,使得C=A+B,其中A和B也是S种的元素. 思想: 首先,我们将数组从小到大进行快速排序.其次: 1.将最后一个数设为最大数设定为S: 2.用 ...

  3. C语言向有序数组中插入一个数使该数组仍保持有序

    C语言向有序数组中插入一个数使该数组仍保持有序 #include<stdio.h> int main() {     int n,i,j,t,k;     printf("您喜欢 ...

  4. 算法:数组中寻找两个数字的和等于固定值

    数组中寻找两个数字的和等于固定值 下面为实现思路及代码 codes. // 思路 // 先进后出 两端逼近 // for example x + y = z 前置条件:z的值固定 // 故x固定 则y ...

  5. 输入一个已经按升序排序过的数组和一个数字, 在数组中查找两个数,使得它们的和正好是输入的那个数字。

    原文转自:http://blog.csdn.net/u013322907/article/details/38300711 题目:输入一个已经按升序排序过的数组和一个数字,在数组中查找两个数,使得它们 ...

  6. 在数组中找重复数、只出现一次的数或丢失数的题目(Leetcode题解-Python语言)

    在一维数组中的考察中,最常见的就是找出数组中的重复数.只出现一次的数或者丢失(消失)数等等. 一般来说,首先想到的就是用哈希表(集合)来记录出现过的数,基本所有的题都可以用集合来做,而技巧性在于有时可 ...

  7. 猿人学题库十九题——css加密-雪碧图/数据干扰等——地毯式采坑学习

    猿人学题库十四题--css加密-雪碧图/数据干扰等 1.  首先 进入 浏览器的开发者工具, 打开就是 俩个无线debugg,正常的操作过掉 1.  找到 debugg 对应的行数,右击选择 neve ...

  8. 程序员面试100题之十五:数组分割

    一.题目概述:有一个没有排序,元素个数为2N的正整数数组.要求把它分割为元素个数为N的两个数组,并使两个子数组的和最接近. 假设数组A[1..2N]所有元素的和是SUM.模仿动态规划解0-1背包问题的 ...

  9. 牛客题霸 [ 数字在升序数组中出现的次数] C++题解/答案

    牛客题霸 [ 数字在升序数组中出现的次数] C++题解/答案 题目描述 统计一个数字在升序数组中出现的次数. 题解: 直接for循环,if判断一下,如果是目标的话ant++ 代码: class Sol ...

最新文章

  1. (二十一)数组的初始化
  2. sql server时间转换
  3. 解开一个困扰自己多时的小问题
  4. 产品经理不得不知的APP数据分析及报表设计基础
  5. 文本编辑器_国外程序员最爱的5种文本编辑器
  6. 您属于哪个版本的程序员[转]
  7. java读写注册表的两种方式,Preferences与jRegistry
  8. 数据中台技术及业务发展史与未来趋势展望
  9. 用c语言编译二叉树,C语言 数据结构平衡二叉树实例详解
  10. 这个超时问题花了我两周才解决!
  11. stm32经典笔试题_嵌入式面试经典30问
  12. Error:Cannot find module 'stylus'
  13. 《Java 7程序设计入门经典》一1.10 另一种数据类型
  14. 不同操作系统查看FC HBA卡信息的方法总结
  15. 便于理解假设检验的好例子
  16. wifi物理地址怎么改_怎样修改手机的物理地址
  17. 将图片转化为.py文件
  18. 麒麟子出了一款免费3D角色虚拟摇杆控制器!这也太好用了
  19. 《东周列国志》第五十四回 荀林父纵属亡师 孟侏儒托优悟主
  20. 3d Max修改器中英文对照表

热门文章

  1. 使用 Visual Leak Detector 检测内存泄漏
  2. 如何在有限的时间内编写完整有效的测试用例?
  3. 《恋上数据结构第1季》红黑树(未完)
  4. [转]知乎大神YaqiLYU关于tracking方向的2013-2016趋势总览!!!强烈推荐!!!
  5. 医药公司java,医药管理系统java版
  6. App.vue文件本质上也是js文件(javascript文件)
  7. cas ajax请求重定向,cas 单点登录 .net client mvc 重定向问题
  8. 行星齿轮设计_3D打印用于制造刚度平衡的行星架
  9. uni app input添加获取验证码按钮_FILEX | 如何在UniSwap挖到UNI?
  10. python爬虫都能干什么用_5 行代码就能写一个 Python 爬虫