两个数之和等于第三个数
来源:互联网 发布:sas数据分析软件 编辑:程序博客网 时间:2024/05/07 17:39
这是一个很好的算法题,解法类似于快速排序的整理方法。同时,更为值得注意的是这道题是 人人网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;}
这样就以高效的方法得到了结果。
- 两个数之和等于第三个数
- 两个数之和等于第三个数 --改進版 。
- 人人网2014年笔试题【两个数之和等于第三个数】
- 两个数之和等于目标数
- 数组两个数之和,等于给定数
- 找出一个有序数组中任意2数之和等于给出的第三个数
- 一个数(3000内)等于两个素数之和
- 【c语言】求斐波那契数列的前40个数。特点,第1,2个数为1,从第三个数开始,该数是前面两个数之和
- 解第一个数是1,第二个数是1,第三个数是前两个数之和,求第n个数的值。
- 数组中两个数之和等于某个数字,返回这两个数的下标
- 两个数字之和等于sum
- 两数之和等于x
- 两数之和等于目标值
- 【算法C++】检测数组里是否有两个数之和等于某个数
- C#第三周 任务4 求两个数之和
- 一个无序数组中两个数之和等于给定的值sum
- 给出一个数和一个有序数组,找出该数组中之和等于该数的两个数
- 求两个数之和
- Android 请求服务器 设置本地缓存
- glib 中 IO Channels 理解
- sqlite3简单教程整理
- windows 查看连接数命令 wc命令
- 0-1背包问题 | DP
- 两个数之和等于第三个数
- [Play with T]_[C# 类与属性操作] ObjectMap 方法 将TTfrom类的对象转换为TEntity对象
- 用友软件用友二次开发用友单据导入用友凭证导入工具用友EXCEL导入工具EXCEL导入凭证
- 柱状图最小跨度设置注意
- 【OpenGL游戏开发之三】OpenGl核心函数库汇总
- [专访]从12306说起 如何构建高并发高性能网站
- How to Load Dialog From a Resource DLL?
- MongoDB开发学习 ,经典入门
- 在VC++中使用OCCI