找出升序数组中和为给定值的两个数字

该博客介绍了如何在已升序排列的数组中找到两个数,使得它们的和等于给定的目标值。文章通过示例代码展示了如何避免内存越界错误,并提供了`FindTwoNumbersWithSum`函数的实现,该函数遍历数组并返回找到的两个数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一开始提交时候出现了运行错误,原因是接口中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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值