【100题】第十四题(数组中找两个数使其和等于输入数)
一,题目:输入一个已经按升序排序过的数组和一个数字,在数组中查找两个数,使得它们的和正好是输入的那个数字。要求时间复杂度是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题】第十四题(数组中找两个数使其和等于输入数)相关推荐
- 【编程题目】输入一个已经按升序排序过的数组和一个数字,在数组中查找两个数,使得它们的和正好是输入的那个数字。...
第 14 题(数组): 题目:输入一个已经按升序排序过的数组和一个数字, 在数组中查找两个数,使得它们的和正好是输入的那个数字. 要求时间复杂度是 O(n).如果有多对数字的和等于输入的数字,输出任意 ...
- 求数组最大数,该数为数组中某两个数相加
题目: 百度笔试:在一个正整数集合S中,找出一个最大数C,使得C=A+B,其中A和B也是S种的元素. 思想: 首先,我们将数组从小到大进行快速排序.其次: 1.将最后一个数设为最大数设定为S: 2.用 ...
- C语言向有序数组中插入一个数使该数组仍保持有序
C语言向有序数组中插入一个数使该数组仍保持有序 #include<stdio.h> int main() { int n,i,j,t,k; printf("您喜欢 ...
- 算法:数组中寻找两个数字的和等于固定值
数组中寻找两个数字的和等于固定值 下面为实现思路及代码 codes. // 思路 // 先进后出 两端逼近 // for example x + y = z 前置条件:z的值固定 // 故x固定 则y ...
- 输入一个已经按升序排序过的数组和一个数字, 在数组中查找两个数,使得它们的和正好是输入的那个数字。
原文转自:http://blog.csdn.net/u013322907/article/details/38300711 题目:输入一个已经按升序排序过的数组和一个数字,在数组中查找两个数,使得它们 ...
- 在数组中找重复数、只出现一次的数或丢失数的题目(Leetcode题解-Python语言)
在一维数组中的考察中,最常见的就是找出数组中的重复数.只出现一次的数或者丢失(消失)数等等. 一般来说,首先想到的就是用哈希表(集合)来记录出现过的数,基本所有的题都可以用集合来做,而技巧性在于有时可 ...
- 猿人学题库十九题——css加密-雪碧图/数据干扰等——地毯式采坑学习
猿人学题库十四题--css加密-雪碧图/数据干扰等 1. 首先 进入 浏览器的开发者工具, 打开就是 俩个无线debugg,正常的操作过掉 1. 找到 debugg 对应的行数,右击选择 neve ...
- 程序员面试100题之十五:数组分割
一.题目概述:有一个没有排序,元素个数为2N的正整数数组.要求把它分割为元素个数为N的两个数组,并使两个子数组的和最接近. 假设数组A[1..2N]所有元素的和是SUM.模仿动态规划解0-1背包问题的 ...
- 牛客题霸 [ 数字在升序数组中出现的次数] C++题解/答案
牛客题霸 [ 数字在升序数组中出现的次数] C++题解/答案 题目描述 统计一个数字在升序数组中出现的次数. 题解: 直接for循环,if判断一下,如果是目标的话ant++ 代码: class Sol ...
最新文章
- (二十一)数组的初始化
- sql server时间转换
- 解开一个困扰自己多时的小问题
- 产品经理不得不知的APP数据分析及报表设计基础
- 文本编辑器_国外程序员最爱的5种文本编辑器
- 您属于哪个版本的程序员[转]
- java读写注册表的两种方式,Preferences与jRegistry
- 数据中台技术及业务发展史与未来趋势展望
- 用c语言编译二叉树,C语言 数据结构平衡二叉树实例详解
- 这个超时问题花了我两周才解决!
- stm32经典笔试题_嵌入式面试经典30问
- Error:Cannot find module 'stylus'
- 《Java 7程序设计入门经典》一1.10 另一种数据类型
- 不同操作系统查看FC HBA卡信息的方法总结
- 便于理解假设检验的好例子
- wifi物理地址怎么改_怎样修改手机的物理地址
- 将图片转化为.py文件
- 麒麟子出了一款免费3D角色虚拟摇杆控制器!这也太好用了
- 《东周列国志》第五十四回 荀林父纵属亡师 孟侏儒托优悟主
- 3d Max修改器中英文对照表
热门文章
- 使用 Visual Leak Detector 检测内存泄漏
- 如何在有限的时间内编写完整有效的测试用例?
- 《恋上数据结构第1季》红黑树(未完)
- [转]知乎大神YaqiLYU关于tracking方向的2013-2016趋势总览!!!强烈推荐!!!
- 医药公司java,医药管理系统java版
- App.vue文件本质上也是js文件(javascript文件)
- cas ajax请求重定向,cas 单点登录 .net client mvc 重定向问题
- 行星齿轮设计_3D打印用于制造刚度平衡的行星架
- uni app input添加获取验证码按钮_FILEX | 如何在UniSwap挖到UNI?
- python爬虫都能干什么用_5 行代码就能写一个 Python 爬虫