和为s的两个数字
- 已知一个升序数组array和一个数字s,数组不包含重复数字,在数组中查找两个 数,使得它们的和正好为s;如果有多对数字的和等于s,则全部输出。
代码
#include <stdio.h>
#include <vector>
using namespace std;
void two_sum(vector<int> nums, int s){
int i = 0;
int j = (int)nums.size()-1;
int sum = nums[i] + nums[j];
while (i<j) {
if (sum==s) {
printf("%d %d\n", nums[i], nums[j]);
i++;
j--;
sum = nums[i] + nums[j];
}
else if (sum<s){
i++;
sum = nums[i] + nums[j];
}
else{
j--;
sum = nums[i] + nums[j];
}
}
}
int main() {
int a[] = {1,3,4,5,8,9,11};
vector<int> array(a,a+7);
two_sum(array, 13);
return 0;
}
思路及执行过程
思路:定义两个指针,分别指向数组的头尾,并计算头尾元素的和sum。
- 当等于给定值时,则输出这两个数,并且使头指针++,尾指针–;重新计算sum
- 当小于给定值时,则头指针++,重新计算sum
- 当大于给定值时,则尾指针–,重新计算sum
直到头指针不小于尾指针时结束。