解法一: 两重循环, 找到这两个加和为target的数
#include <iostream>
#include <vector>
using namespace std;
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
for(int i = 0; i < nums.size(); ++ i) {
for(int j = i + 1; j < nums.size(); ++ j) {
if(nums[i] + nums[j] == target) {
return {i, j};
}
}
}
}
};
void print(const vector<int>& v)
{
for(int e : v)
cout << e << " ";
cout << endl;
}
int main()
{
const int a[] = {2,7,11,15};
vector<int> v(a, a + sizeof(a)/sizeof(int));
int target = 9;
print(Solution().twoSum(v, target));
return 0;
}
解法二: 先将数组中所有的数存放到hashmap中, 再遍历该数组, 判断target-当前的数字nums[i]是否已在hashmap中, 若存在, 并且索引值不同, 则返回, 否则, 继续循环
#include <iostream>
#include <vector>
#include <unordered_map>
using namespace std;
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
unordered_map<int, int> record;
for(int i = 0; i < nums.size(); ++ i) {
record[nums[i]] = i;
}
for(int i = 0; i < nums.size(); ++ i) {
int complement = target - nums[i];
unordered_map<int, int>::iterator it = record.find(complement);
if(it != record.end() && it->second != i)
return {i, it->second};
}
}
};
void print(const vector<int>& v)
{
for(int e : v)
cout << e << " ";
cout << endl;
}
int main()
{
const int a[] = {1,2,42,42,7,65};
vector<int> v(a, a + sizeof(a)/sizeof(int));
int target = 84;
print(Solution().twoSum(v, target));
return 0;
}
解法三: 判断当前的(target - nums[i])是否在nums[i]之前的数中存在, 若存在则返回, 若不存在, 则将该数存放到hashmap中
#include <iostream>
#include <vector>
#include <exception>
#include <unordered_map>
using namespace std;
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
unordered_map<int, int> record;
for(int i = 0; i < nums.size(); ++ i) {
int complement = target - nums[i];
if(record.find(complement) != record.end()) {
int res[] = {i, record[complement]};
return vector<int>(res, res + 2);
}
else {
record[nums[i]] = i;
}
}
}
};
void print(const vector<int>& v)
{
for(int e : v)
cout << e << " ";
cout << endl;
}
int main()
{
const int a[] = {2,7,11,15};
vector<int> nums(a, a + sizeof(a)/sizeof(int));
int target = 9;
print(Solution().twoSum(nums, target));
return 0;
}