题目:输入一个已经按升序排序过的数组和一个数字,在数组中查找两个数,使得它们的和正好是输入的那个数字。要求时间复杂度是O(n)。如果有多对数字的和等于输入的数字,输出任意一对即可。
例如:A[]={1,2,3,4,5,6,7,8,9}, sum = 15,输出6,9.
思路:
因为数组是有序的,因此我们可设两个指针left,right,分别从头和从尾部遍历,若A[left] + A[right] > sum,则right–;若A[left] + A[right] < sum,则left++;否则我们就找到了所需的两个数字,分别为A[left]和A[right]。
void findTwoNumber(int A[],int n,int sum){
//A是递增数组
int left = 0;
int right = n - 1;
int target1;
int target2;
while(left < right){
if(A[left] + A[right] > sum){
right--;
}
else if(A[left] + A[right] < sum){
left++;
}
else{
target1 = A[left];
target2 = A[right];
break;
}
}
cout<<target1<<" "<<target2<<endl;
}
本文介绍了一种在已排序数组中寻找两数使和为目标值的算法,采用双指针技术实现O(n)时间复杂度。通过左右指针逐步逼近目标和,找到符合条件的两个数。
3110

被折叠的 条评论
为什么被折叠?



