题目:
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。
你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。
给定 nums = [2, 7, 11, 15], target = 9
因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]
解决方法1:暴力方法,首先想到是解决问题而不管时间等其他因素
解决方法2: map
#include <iostream>
#include <vector>
#include <string>
#include <map>
using namespace std;
class solution_baolijiefa {
public:
vector<int> twosum(vector<int>& nums, int target) {
vector<int> vec;
for (int i = 0; i < nums.size(); i++)
{
for (int j = i + 1; j < nums.size(); j++)
{
if (nums[i] + nums[j] == target)
{
vec.push_back(i);
vec.push_back(j);
}
}
}
return vec;
}
};
class solution_map {
public:
vector<int> twosum(vector<int>& nums, int target) {
map<int, int> map_;
vector<int> vec;
for (int i = 0; i < nums.size(); i++)
{
int temp = target - nums[i];
if (map_.count(temp) && map_[temp] != i) {
vec.push_back(map_[temp]);
vec.push_back(i);
}
map_[nums[i]] = i;
}
return vec;
}
};
int main()
{
cout << "hello world!" << endl;
vector<int> vec;
vec.push_back(7);
vec.push_back(8);
vec.push_back(11);
vec.push_back(7);
int target = 14;
solution_baolijiefa solution1;
solution_map solution2;
for (int i = 0; i < 2; i++) {
cout << solution2.twosum(vec, target)[i] << endl;
}
system("pause");
return 0;
}