题目
输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们的和正好是s。如果有多对数字的和等于s,则输出任意一对即可。
例如,输入数组{1,2,4,7,11,15}和数字15.由于4+11=15,因此输出4和11
解题思路
- 定义两个指针,第一个指针指向数组的第一个(最小的)数字1,第二个指针指向数组的最后一个(最大的)数字15.
- 这两个数字的和16>15,因此把第二个指针往前移动一个数字,让它指向11。这时候两个数字1与11的和为12,小于15.
- 把第一个指针往后移动一个数字指向2,2+11<15,继续把第一个指针往后移动。
代码
class Solution{
public:
bool findNumwithSum(int *a,int length,int *num1,int *num2,int sum)
{
bool found = false;
if(length < 1 || num1 == NULL || num2 == NULL)
{
return found;
}
int ahead = length-1;
int behind = 0;
while(ahead > behind)
{
long long curSum = a[ahead] + a[behind];
if(curSum == sum)
{
*num1 = a[behind];
*num2 = a[ahead];
found = true;
break;
}
else if(curSum > sum)
{
ahead--;
}
else
{
behind++;
}
}
return found;
}
};
网友评论