1、题目描述
找出一个递增数组中两个和为s的数字,比如给定数组:{ 1,2,4,7,11,15 } 和数字s=15,则找出的数字为11和4。
2、解题思路
(1)暴力解法:
时间复杂度为O(n^2),面试通不过滴。
(2)双指针法:
使用两个指针,一个从头开始遍历,一个从尾开始遍历,如果两个指针所指向的值的和等于s,则找到这两个数。如果指向值的和大于s,则头指针不变,尾指针向前移动。如果指向值的和小于s,则尾指针不变,头指针向后移动。时间复杂度为O(n),代码如下:
#include<iostream>
#include<vector>
using namespace std;
void TwoNumberSum(vector<int> input,int sum) {
int num1;
int num2;
for (int i = 0,j = input.size() - 1; i < j;) {
if (input[i] + input[j] == sum) {
num1 = input[i];
num2 = input[j];
break;
}
else if (input[i] + input[j] < sum)
i++;
else
j--;
}
cout << "num1:" << num1<<endl;
cout << "num2:" << num2 << endl;
}