#include<iostream>
#include<vector>
using namespace std;
class Solution {
public:
vector<int> twoSum(vector<int>& nums,int target) {
vector<int>::iterator it,it1;
vector<int> result;
int i=0;
for(it=nums.begin();it!=nums.end();it++,i++) {
for(it1=it+1,j=i+1;it1!=nums.end();it1++,j++) {
if ((*it)+(*it1)==target) {
cout << (*it) << " and " << (*it1) << endl;
result.push_back(i);
result.push_back(j);
return result;
}
}
}
return result;
}
};
int main() {
Solution* pTest = NULL;
vector<int> nums{1,4,3,5,6,7};
vector<int> tt = (*pTest).twoSum(nums,11);
return 0;
}
优解法:O(n) Solution
(利用了hash map)
vector<int> twoSum(vector<int> &numbers, int target)
{
//Key is the number and value is its index in the vector.
unordered_map<int, int> hash;
vector<int> result;
for (int i = 0; i < numbers.size(); i++) {
int numberToFind = target - numbers[i];
//if numberToFind is found in map, return them
if (hash.find(numberToFind) != hash.end()) {
//+1 because indices are NOT zero based
result.push_back(hash[numberToFind] + 1);
result.push_back(i + 1);
return result;
}
//number was not found. Put it in the map.
hash[numbers[i]] = i;
}
return result;
}
注意点:
vector定义,插入值,遍历
关联容器
- 按关键字有序保存元素:map、set、multimap和multiset(后两个中关键字可以重复出现)
- 无序集合:unordered_map,unordered_set,unordered_multimap和unodered_multiset(后两个中关键字可以重复出现)
优解法2 O(n) Solution
(先对vector排序,默认为升序,然后最小和最大元素相加,若大于target,最大元素位置减1,若小于target,最小元素位置加1)
class Solution {
public:
vector<int> twoSum(vector<int> &numbers, int target) {
// Note: The Solution object is instantiated only once and is reused by each test case.
vector<int> num = numbers;
std::sort(num.begin(), num.end());
int length = numbers.size();
int left = 0;
int right = length - 1;
int sum = 0;
vector<int> index;
while(left < right)
{
sum = num[left] + num[right];
if(sum == target)
{
for(int i = 0; i < length; ++i)
{
if(numbers[i] == num[left])
{
index.push_back(i + 1);
}
else if(numbers[i] == num[right])
{
index.push_back(i + 1);
}
if(index.size() == 2)
{
break;
}
}
break;
}
else if(sum > target)
{
--right;
}
else
{
++left;
}
}
return index;
}
};