今天做一个题目:输入一个integer数组和一个integer型的target,然后输出数组中两个元素s1、s2,使s1和s2相加等于target。我做的方法是先排序,然后用一个指针指向数组头部,一个指针指向数组尾部,依次判断两者相加是否等于target。若大于target,则尾指针向前移动;若小于target,则头指针向前移动;若相等,则返回,直到两个指针相等。
刚开始的代码如下:
#include<iostream>
#include<vector>
#include<iterator>
#include<map>
#include<algorithm>
using namespace std;
typedef pair<vector<int>::iterator, vector<int>::iterator> iterator_pair;
iterator_pair TwoSum(vector<int> coll, const int sum)
{
vector<int>::iterator first = coll.begin();
vector<int>::iterator last = --coll.end();
int temp;
while (first != last)
{
temp = *first + *last;
if (temp > sum)
last--;
else if (temp < sum)
first++;
else