编程算法 - 和为s的两个数字 代码(C)
2014-07-11 08:16
274 查看
和为s的两个数字 代码(C)
本文地址: http://blog.csdn.net/caroline_wendy题目: 输入一个递增排序的数组和一个数字s, 在数组中查找两个数, 使得它们的和正好是s.
如果有多对数字的和等于s, 输出任意一对即可.
排序数组, 则可以从两端(即最大值, 最小值)开始进行查找, 当和大于时, 则减少前端, 当和小于时, 则递增尾端.
时间复杂度O(n).
代码:
/*
* main.cpp
*
* Created on: 2014.6.12
* Author: Spike
*/
/*eclipse cdt, gcc 4.8.1*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
bool FindNumbersWithSum(int data[], int length, int sum, int* num1, int* num2)
{
bool found = false;
if (length<1 || num1==NULL || num2 == NULL)
return found;
int ahead = length-1;
int behind = 0;
while (ahead > behind) {
long curSum = data[ahead] + data[behind];
if (curSum == sum) {
*num1 = data[behind];
*num2 = data[ahead];
found = true;
break;
} else if (curSum < sum)
++behind;
else
--ahead;
}
return found;
}
int main(void)
{
int data[] = {1, 2, 4, 7, 11, 15};
int num1, num2;
if (!FindNumbersWithSum(data, 6, 15, &num1, &num2))
printf("Error\n");
printf("num1 = %d num2 = %d\n", num1, num2);
}
输出:
num1 = 4 num2 = 11
相关文章推荐
- 编程算法 - 和为s的两个数字 代码(C)
- 编程算法 - 数组中出现次数超过一半的数字 代码(C)
- 编程算法 - 数字在排序数组中出现的次数 代码(C)
- 编程算法 - 数组中出现次数超过一半的数字 代码(C)
- Java判断两个数字大小代码实例
- 剑指offer(java代码)——和为S的两个数字
- 编程算法 - 数组中只出现一次的数字 代码(C)
- JavaScript使用Max函数返回两个数字中较大数的代码
- 第16周项目5-编程处理C++代码(输入m、n两个数字,从第m行起的n行代码将作为注释使用)
- 编程算法 - 两个链表的第一个公共结点 代码(C)
- 一个数组中只有两个数是不同的,其他数字是成对出现的,下面代码可将该数组中不同的两数字找出并输出
- 编程算法 - 两个链表的第一个公共结点 代码(C)
- 编程算法 - 圆圈中最后剩下的数字(递推公式) 代码(C++)
- 编程算法 - 数字数组中只出现一次 代码(C)
- 剑指offer 01-06解答思路以及代码(顺序数组找特定数字,替换空格字符,链表反转输出,重建二叉树,两个栈实现队列效果,旋转数组最小元素)
- 一个整型数组中数字出现两次,但是只有2个数字出现一次,求解这两个只出现一次的数的代码
- 关于两个任意长度的数字相乘的代码设计(不使用BigDecimal的情况下)
- 编程算法 - 圆圈中最后剩下的数字(递推公式) 代码(C++)
- 一个数组中只有两个数是不同的,其他数字是成对出现的,下面代码可将该数组中不同的两数字找出并输出
- Java判断两个数字大小代码实例