题目:

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

思路:

1、枚举

固定一个数字,然后依次判断数组中该数字后面的数字与它的和是不是等于s。

时间复杂度:O(n^2)

2、前后遍历

利用排序数组的规律,定义两个指针,分别指向数组的首尾,如果两个指针所指的数字大于s,则尾指针-1;如果小于s,则首指针+1;如果等于s,则输出。如果两个指针相遇,仍找不到等于s的两个数,则说明数组中不存在和为s的两个数字。

代码:

#include <iostream>

using namespace std;

bool FindNumbersWithSum(int data[],int length,int sum,int* num1,int* num2){
bool found=false;
if(data==NULL || length<=1 || num1==NULL || num2==NULL)
return found; int ahead=length-1;
int behind=0; long long curSum=0;
while(ahead>behind){
curSum=data[ahead]+data[behind];
if(curSum==sum){
*num1=data[ahead];
*num2=data[behind];
found=true;
break;
}
else if(curSum<sum)
behind++;
else
ahead--;
} return found;
} int main()
{
int A[]={1,2,4,7,11,15};
int len=sizeof(A)/sizeof(A[0]);
int num1=0;
int num2=0;
int sum=15;
cout << FindNumbersWithSum(A,len,sum,&num1,&num2) << endl;
cout<< num1 << " " << num2 << endl;
return 0;
}

在线测试OJ:

http://www.nowcoder.com/books/coding-interviews/390da4f7a00f44bea7c2f3d19491311b?rp=2

输入一个递增排序的数组和一个数字S,在数组中查找两个数,是的他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。

输出描述: 对应每个测试案例,输出两个数,小的先输出。

AC代码:

class Solution {
public:
vector<int> FindNumbersWithSum(vector<int> array,int sum) {
vector<int> result;
int len=array.size();
if(len<=1)
return result; bool found=false;
int pHead=0,pTail=len-1;
int curSum=0,greatestSum=INT_MAX,multiply=1;
int num1=0,num2=0;
while(pTail>pHead){
curSum=array[pHead]+array[pTail];
if(curSum==sum){
found=true;
multiply=array[pHead]*array[pTail];
if(multiply<greatestSum){
greatestSum=multiply;
num1=array[pHead];
num2=array[pTail];
}
pHead++;
pTail--;
}
else if(curSum>sum)
pTail--;
else
pHead++;
} if(found==false)
return result; result.push_back(num1);
result.push_back(num2);
return result;
}
};

(剑指Offer)面试题41:和为s的两个数字的更多相关文章

  1. C++版 - 剑指Offer 面试题45:圆圈中最后剩下的数字(约瑟夫环问题,ZOJ 1088:System Overload类似)题解

    剑指Offer 面试题45:圆圈中最后剩下的数字(约瑟夫环问题) 原书题目:0, 1, - , n-1 这n个数字排成一个圈圈,从数字0开始每次从圆圏里删除第m个数字.求出这个圈圈里剩下的最后一个数字 ...

  2. 剑指Offer - 九度1352 - 和为S的两个数字

    剑指Offer - 九度1352 - 和为S的两个数字2014-02-05 18:15 题目描述: 输入一个递增排序的数组和一个数字S,在数组中查找两个数,是的他们的和正好是S,如果有多对数字的和等于 ...

  3. 剑指Offer:面试题29——数组中出现次数超过一半的数字(java实现)

    PS:在前几天的面试中,被问到了这个题.然而当时只能用最低效的方法来解. 问题描述: 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字.例如输入一个长度为9的数组{1,2,3,2,2,2, ...

  4. 剑指Offer面试题:6.旋转数组中的最小数字

    一 题目:旋转数组中的最小数字 题目:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转.输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素.例如数组{3,4,5,1,2}为{1, ...

  5. 剑指offer四十二之和为S的两个数字

    一.题目 输入一个递增排序的数组和一个数字S,在数组中查找两个数,是的他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的. 二.思路 数列满足递增,设两个头尾两个指针i和j,若ai + ...

  6. 【剑指Offer】42、和为S的两个数字

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

  7. 剑指Offer:面试题15——链表中倒数第k个结点(java实现)

    问题描述 输入一个链表,输出该链表中倒数第k个结点.(尾结点是倒数第一个) 结点定义如下: public class ListNode { int val; ListNode next = null; ...

  8. 剑指offer面试题3 二维数组中的查找(c)

    剑指offer面试题三:

  9. 剑指Offer——笔试题+知识点总结

    剑指Offer--笔试题+知识点总结 情景回顾 时间:2016.9.23 12:00-14:00 19:00-21:00 地点:山东省网络环境智能计算技术重点实验室 事件:笔试 注意事项:要有大局观, ...

  10. C++版 - 剑指offer之面试题37:两个链表的第一个公共结点[LeetCode 160] 解题报告

    剑指offer之面试题37 两个链表的第一个公共结点 提交网址: http://www.nowcoder.com/practice/6ab1d9a29e88450685099d45c9e31e46?t ...

随机推荐

  1. hdu 1596 find the safest road (dijkstra)

    Problem Description XX星球有很多城市,每个城市之间有一条或多条飞行通道,但是并不是所有的路都是很安全的,每一条路有一个安全系数s,s是在 0 和 1 间的实数(包括0,1),一条 ...

  2. 【树形DP】BZOJ1596-[Usaco2008 Jan]电话网络

    [题目大意] 在一棵有n个节点的树上建信号塔,每个节点的信号塔可以覆盖当前节点极其相连的节点.问要覆盖所有节点,至少需要多少座信号塔? [思路] 经典的树形DP,直接复制一下. f[i][0]:以i为 ...

  3. bzoj 2055: 80人环游世界 -- 上下界网络流

    2055: 80人环游世界 Time Limit: 10 Sec  Memory Limit: 64 MB Description     想必大家都看过成龙大哥的<80天环游世界>,里面 ...

  4. HDU 5644 King's Pilots 费用流

    King's Pilots 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5644 Description The military parade w ...

  5. sklearn中的超参数调节

    进行参数的选择是一个重要的步骤.在机器学习当中需要我们手动输入的参数叫做超参数,其余的参数需要依靠数据来进行训练,不需要我们手动设定.进行超参数选择的过程叫做调参. 进行调参应该有一下准备条件: 一个 ...

  6. Android Studio安装后提示No JVM installation found解决办法

    Android Studio安装后提示No JVM installation found解决办法 问题描述:Android Studio安装完毕,打开时出现提示"No JVM install ...

  7. 配置Maven环境变量与Intelij IDE配置Maven

    Maven有什么用? 以前我们导入第三方jar包的流程是什么?一般是download,然后copy到项目中,然后依赖(library)项目,最后被我们使用. 通俗的说,就是不用我们自己去downloa ...

  8. Git与SVN

    http://www.nowamagic.net/academy/detail/48160207 前面提到,Linus一直痛恨CVS及SVN这些集中式的版本控制系统,为什么呢?Git是分布式版本控制系 ...

  9. Spring JdbcTemplate查询实例

    这里有几个例子向您展示如何使用JdbcTemplate的query()方法来查询或从数据库提取数据.整个项目的目录结构如下: 1.查询单行数据 这里有两种方法来查询或从数据库中提取单行记录,并将其转换 ...

  10. 老生常谈javascript的5中继承

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...