这是一个很好的算法题,解法类似于快速排序的整理方法。同时,更为值得注意的是这道题是 人人网2014校园招聘的笔试题,下面首先对题目进行描述:

      给出一个有序数组,另外给出第三个数,问是否能在数组中找到两个数,这两个数之和等于第三个数。

      我们首先看到第一句话,这个数组是有序的,所以,我们可以定义两个指针,一个指向数组的第一个元素,另一个指向应该指向的位置(这个需要看具体的实现和数组给定的值),首先计算两个位置的和是否等于给定的第三个数,如果等于则算法结束,如果大于,则尾指针向头指针方向移动,如果小于,则头指针向尾指针方向移动,当头指针大于等于尾指针时算法结束,没有找到这样的两个数。

      它看起来就好像下面这张图一样:


      下面给出具体的实现:

#include <stdio.h>int judge(int *a, int len, int k, int *num1, int *num2);int main(int argc, char **argv)
{int test_array[] = {3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};int result = -1;int num1, num2;result = judge(test_array, sizeof(test_array) / sizeof(int), 12, &num1, &num2);if(result == 0){printf("%d\t%d\n", num1, num2);}else if(result == -1){printf("can't find");}else{printf("error");}
}int judge(int *a, int len, int k, int *num1, int *num2)
{int *low = NULL;int *high = NULL;int i = 0;int result = -1;if(a == NULL || len < 2){return result;}if(a[0] >= k){return result;}while(a[i] <= k && i < len){i++;}low = a;high = a + i - 1;while(low  < high){*num1 = *low;*num2 = *high;if((*low + *high) == k){result = 0;break;}else if((*low + *high) > k){high--;}else if((*low + *high) < k){low++;}}return result;
}

这样就以高效的方法得到了结果。

两个数之和等于第三个数相关推荐

  1. 题目42:菲波那契数列是指这样的数列: 数列的第一个和第二个数都为1,接下来每个数都等于前面2个数之和。给出一个正整数k,要求菲波那契数列中第k个数是多少。

    题目转载:http://python.wzms.com/s/1/35 题目描述: 菲波那契数列是指这样的数列: 数列的第一个和第二个数都为1,接下来每个数都等于前面2个数之和. 给出一个正整数k,要求 ...

  2. 斐波那契数列_菲波那契数列是指这样的数列: 数列的第一个和第二个数都为1,接下来每个数都等于前面2个数之和。给出一个正整数a,要求菲波那契数列中第a个数对1000取模的结果是多少。

    描述 菲波那契数列是指这样的数列: 数列的第一个和第二个数都为1,接下来每个数都等于前面2个数之和.给出一个正整数a,要求菲波那契数列中第a个数对1000取模的结果是多少. 格式 输入格式 第1行是测 ...

  3. 给定数组A,大小为n,现给定数X,判断A中是否存在两数之和等于X

    1. 问题描述 给定排的数组A,大小为n,现给定数X,判断A中是否存在两数之和等于X.给出一个O(nlg(n))的算法. 2. 解决思路 首先对数组进行排序,如果使用归并的排序的话,算法的复杂度在nl ...

  4. 数组-leetcode#15-找出三个数之和等于0的所有不重复序列

    class Solution { public:vector<vector<int>> threeSum(vector<int>& nums) {vecto ...

  5. 如何判断两个数互质?三个数两两互质?……N个数两两互质?(Java代码实现)

    (一).互质的概念:公约数只有1的两个数叫做互质数.根据这一定义可以对一组数是否互质进行判断.如:2和7的公约数只有1,则它们是互质数. (二).判断互质的方法大概来讲有三种 一.根据互质的概念: 如 ...

  6. 1.给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的 任意个数之和 等于 target,并打印出所有结果的索引,索引不能重复。

    /*做的一家公司笔试题,两数之和解决,N数之和想了半天,最终参考了别人的思路,收货不错参考地址:https://blog.csdn.net/dengz_j/article/details/114540 ...

  7. java获取三个数从小到大排序_三个数从小到大排序

    描述 现在要写一个程序,实现给三个数排序的功能 输入 输入三个正整数 输出 给输入的三个正整数排序 样例输入 20 7 33 样例输出 7 20 33 Java实现 import java.util. ...

  8. python求三个数平均值_python求三个数平均值

    本文收集整理关于python求三个数平均值的相关议题,使用内容导航快速到达. 内容导航: Q1:利用python3.x计算任意数据平均值 l=[1,2,3]def ave(a):print(sum(a ...

  9. 横竖三个数的和相等_把21、23、25、27、29五个数使横竖的三个数和都相等

    展开全部 竖行应该是21,25,29, 横行应该是23,25,27 23+25 +27=21+25+29 x1 x2 x3 y1 y2 y3 z1 z2 z3 x1+x2+x3=x1+y1+z1 简化 ...

最新文章

  1. Koa2和Redux中间件源码研究
  2. html 资源缓存,解决index.html缓存问题
  3. Python中有用的字符串方法
  4. C#扩展方法应用之 try catch finally 封装
  5. hdu 1507(最大匹配)
  6. asp.net下Response.ContentType类型汇总
  7. java命令行参数是什么_Java实验课:命令行参数是什么?
  8. VMware Workstation macOS Unlocker 下载慢的解决办法
  9. 深入浅出 NXLog (二)
  10. 微信公众号配置JSAPI支付
  11. 广告配音免费制作软件让你轻松完成广告配音
  12. 双非年薪40W,从字节裸辞了
  13. 如何利用DW快速编写一个简单网页
  14. JavaScript:实现multiplesThreeAndFive三或五倍数的算法 (附完整源码)
  15. 【转帖】计算机编程语言
  16. vue项目无法在IE打开
  17. mysql最高平均工资_mysql查询出平均工资最高的部门编号
  18. 服务器芯片组 c242评测,完胜690!最详尽的C68G芯片组性能评测
  19. Text Kit框架——动态字体及cell动态高度
  20. OSChina 周三乱弹 ——grath最近睡了一主播

热门文章

  1. TP获取服务器mysql版本
  2. DataGridView控件60招(一)
  3. Linux下使用Google Authenticator配置SSH登录动态验证码
  4. [开发笔记]-未找到与约束ContractName Microsoft.VisualStudio.Text.ITextDocumentFactoryService...匹配的导出...
  5. 设计模式实战 - 责任链模式
  6. windows redis sentinel install
  7. Docker 上传镜像amp;拉取镜像
  8. openlayers之style符号化
  9. Android笔记-网络篇:网络状态
  10. 【c++】重载操作符