找出升序数组中和为给定值的两个数字
来源:互联网 发布:淘宝中的延长收货 编辑:程序博客网 时间:2024/04/25 18:35
一开始提交时候出现了运行错误,原因是接口中uiLength是unsigned int,而一开始定义head和tail时,其定义为int,内存越界造成错误。
#include "OJ.h"
#include <stdio.h>
int main(void)
{
int i;
int aData[10];
bool flag;
int pNum1, pNum2;
for(i=0;i<10;i++)
aData[i] = i+1;
flag = FindTwoNumbersWithSum(aData, 10, 9, &pNum1, &pNum2);
if(flag)
{
printf("pNum1 = %d\n",pNum1);
printf("pNum2 = %d\n",pNum2);
}
return 0;
}
/*
功能: 输入一个已经按升序排序过的数组和一个数字,在数组中查找两个数,使得它们的和正好是输入的那个数字。如果有多对数字的和等于输入的数字,输出任意一对即可。
输入: int aData[] // 升序数组
unsigned int uiLength // 数组元素个数
int sum, // 给定两个数组的和
输出: int *pNum1 // 第一个数字,对应数组索引小的
int *pNum2 // 第二个数字,对应数组索引大的
返回: 找到返回true,异常返回false
*/
bool FindTwoNumbersWithSum(int aData[], unsigned int uiLength, int sum, int *pNum1, int *pNum2)
{
/*在这里实现功能*/
unsigned int head,tail;
int tempSum;
if(aData==NULL || uiLength<2)
return false;
head = 0;
tail = uiLength-1;
while(head!=tail)
{
tempSum = aData[head] + aData[tail];
if(tempSum == sum)
{
*pNum1 = aData[head];
*pNum2 = aData[tail];
return true;
}
if(tempSum > sum)
tail--;
else
head++;
}
return false;
}
#include "OJ.h"
#include <stdio.h>
int main(void)
{
int i;
int aData[10];
bool flag;
int pNum1, pNum2;
for(i=0;i<10;i++)
aData[i] = i+1;
flag = FindTwoNumbersWithSum(aData, 10, 9, &pNum1, &pNum2);
if(flag)
{
printf("pNum1 = %d\n",pNum1);
printf("pNum2 = %d\n",pNum2);
}
return 0;
}
/*
功能: 输入一个已经按升序排序过的数组和一个数字,在数组中查找两个数,使得它们的和正好是输入的那个数字。如果有多对数字的和等于输入的数字,输出任意一对即可。
输入: int aData[] // 升序数组
unsigned int uiLength // 数组元素个数
int sum, // 给定两个数组的和
输出: int *pNum1 // 第一个数字,对应数组索引小的
int *pNum2 // 第二个数字,对应数组索引大的
返回: 找到返回true,异常返回false
*/
bool FindTwoNumbersWithSum(int aData[], unsigned int uiLength, int sum, int *pNum1, int *pNum2)
{
/*在这里实现功能*/
unsigned int head,tail;
int tempSum;
if(aData==NULL || uiLength<2)
return false;
head = 0;
tail = uiLength-1;
while(head!=tail)
{
tempSum = aData[head] + aData[tail];
if(tempSum == sum)
{
*pNum1 = aData[head];
*pNum2 = aData[tail];
return true;
}
if(tempSum > sum)
tail--;
else
head++;
}
return false;
}
0 0
- 找出升序数组中和为给定值的两个数字
- 找出升序数组中和为给定值的两个数字
- 找出升序数组中和为给定值的两个数字
- 找出升序数组中和为给定值的两个数字
- 【剑指offer】【41】找出升序数组中和为给定值的两个数字
- 找出排序数组中和为给定值的两个数字
- 找出升序数组中和为给定值的两个数字 不要直接用形参里的表示,输出或清零输入时都是大忌
- 2.12 找出数组中和为给定的值的两个数字
- 找出数组中和为给定值的两个数
- 排序数组中和为给定值的两个数字
- 排序数组中和为给定值的两个数字
- 排序数组中和为给定值的两个数字
- 排序数组中和为给定值的两个数字
- 找出数组中和为给定的值的两个数(twoSum)
- 和为n连续正数序列 & 排序数组中和为给定值的两个数字
- [程序员面试题精选100题]10.排序数组中和为给定值的两个数字
- 查找数组中和为某给定值的两个数
- 程序员面试题精选100题(10)-排序数组中和为给定值的两个数字[算法]
- 张正友标定论文翻译(1)
- VC使用GDI+绘图
- alamofire语法已经变化 3.1.5版本
- 排序算法总结
- 张正友标定论文翻译(2)
- 找出升序数组中和为给定值的两个数字
- iPhone屏幕像素 分辨率 xcode中的逻辑宽高的介绍以及strcut与class的区别
- HDU 4560解题报告
- 华为机试题:整数排序
- HDU3371 并查集与最小生成树(判断有无生成树)
- segfault at xxx rip xxx rsp xxx error 4
- WebKit之V8编写简单demon
- C语言 求一个数列的前n项之和,保留两位小数。
- win7下安装/卸载VirtualBox时出错