微软面试100题之14题:输入一个已经按升序排序过的数组和一个数字, 在数组中查找两个数,使得它们的和正好是输入的那个数字。
来源:互联网 发布:刚哥哥淘宝店招制作 编辑:程序博客网 时间:2024/05/01 12:48
题目:输入一个已经按升序排序过的数组和一个数字,
在数组中查找两个数,使得它们的和正好是输入的那个数字。
要求时间复杂度是O(n)。如果有多对数字的和等于输入的数字,输出任意一对即可。
下面给出一个比较简洁的代码:
在数组中查找两个数,使得它们的和正好是输入的那个数字。
要求时间复杂度是O(n)。如果有多对数字的和等于输入的数字,输出任意一对即可。
例如输入数组1、2、4、7、11、15 和数字15。由于4+11=15,因此输出4 和11。
#include <iostream.h>bool FindTwoNumbersWithSum(int data[], // 已经排序的 数组unsigned int length, // 数组长度 int sum, //用户输入的 sum int& num1, // 输出符合和等于sum的第一个数int& 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;}
下面给出一个比较简洁的代码:
#include<iostream>using namespace std; void FindNum(int* array,int length,int sum) { int *begin=&array [0]; int *end=&array[length-1]; while(begin<end) { if ((*begin+*end)>sum) { end--; } else if((*begin+*end)<sum) { begin++; } else { cout<<*begin<<""<<*end<<endl; return; } } cout<<"cannot find"<<endl; }
0 1
- 微软面试100题之14题:输入一个已经按升序排序过的数组和一个数字, 在数组中查找两个数,使得它们的和正好是输入的那个数字。
- 微软面试14题 输入一个已经按升序排序过的数组和一个数字,在数组中查找两个数,使得它们的和正好是输入的那个数字。
- 输入一个已经按升序排序过的数组和一个数字,在数组中查找两个数,使得它们的和正好是输入的那个数字。
- 输入一个已经按升序排序过的数组和一个数字, 在数组中查找两个数,使得它们的和正好是输入的那个数字。
- 输入一个已经按升序排序过的数组和一个数字, 在数组中查找两个数,使得它们的和正好是输入的那个数字
- 输入一个已经按升序排序过的数组和一个数字,在数组中查找两个数,使得它们的和正好是输入的那个数字。
- 输入一个已经按升序排序过的数组和一个数字, 在数组中查找两个数,使得它们的和正好是输入的那个数字。
- 输入一个已经按升序排序过的数组和一个数字, 在数组中查找两个数,使得它们的和正好是输入的那个数字。
- 输入一个已经按升序排序过的数组和一个数字, 在数组中查找两个数,使得它们的和正好是输入的那个数字。
- 第14 题: 题目:输入一个已经按升序排序过的数组和一个数字,在数组中查找两个数,使得它们的和正好是输入的那个数字。
- 【java 面试100】14.输入一个已经按升序排序过的数组和一个数字, 在数组中查找两个数,使得它们的和正好是输入的那个数字
- 一个已经按升序排序过的数组和一个数字, 在数组中查找两个数,使得它们的和正好等于输入的那个数字
- 12. 微软面试题:输入一个已经按升序排序过的数组和一个数字,在数组中查找两个数,使得它们的和正好是输入的那个数字
- 【算法】输入一个已经按升序排过的数组和数字,在数组中查找两个数字,使得它们的和正好是输入那个数字。
- 数据结构——算法之(005)(输入一个已经按升序排序过的数组和一个数字, 在数组中查找两个数,使得它们的和正好是输入的那个数字)
- 每天学习一算法系列(14) (输入一个已经按升序排序过的数组和一个数字,在数组中查找两个数,使得它们的和正好是输入的那个数字)
- 微软100道算法题-----输入一个已经按升序排序过的数组和一个数字, 在数组中查找两个数,使得它们的和正好是输入的那个数字。 要求时间复杂度是O(n)。如果有多对数字的和等于输入的数字,输出任意一对
- 14.输入一个已经按升序排序过的数组和一个数字, 在数组中查找两个数,使得它们的和正好是输入的那个数字。
- 设计模式学习--工厂模式(C++)
- 你是我最美的相遇
- 为CentOS 6.x添加EPEL源
- AM335x Linux调试1--MLO中打印寄存器值
- POJ 1182 食物链(带权并查集)
- 微软面试100题之14题:输入一个已经按升序排序过的数组和一个数字, 在数组中查找两个数,使得它们的和正好是输入的那个数字。
- iOS推送证书导出pem文件
- Java抽象类和接口的区别
- AIDL(安卓接口定义语言)
- java web安全总结
- 获取状态栏高度(运用反射)
- centos CentOS-6.2-i386-minimal 安装gnome桌面环境
- 深入理解Hadoop集群和网络
- 二路归并排序