两种方法:1.两遍哈希表;2.暴力解法
1,两遍哈希表方法代码:
class Solution_1 {
public:
unordered_map<int,int> map;
vector<int> twoSum1(vector<int>&nums1,int target1){
for(int i=0;i < nums1.size();i++)
{
map[nums1[i]] = i;
}
for(int i=0;i < nums1.size();i++)
{
if(map.count(target1-nums1[i])&&map[target1-nums1[i]] != i)
{
std::cout << i << ' '<<map[target1-nums1[i]];
return {i,map[target1-nums1[i]]};
}
}
return {};
}
};
public:
unordered_map<int,int> map;
vector<int> twoSum1(vector<int>&nums1,int target1){
for(int i=0;i < nums1.size();i++)
{
map[nums1[i]] = i;
}
for(int i=0;i < nums1.size();i++)
{
if(map.count(target1-nums1[i])&&map[target1-nums1[i]] != i)
{
std::cout << i << ' '<<map[target1-nums1[i]];
return {i,map[target1-nums1[i]]};
}
}
return {};
}
};
测试结果:
2,暴力解法
#include <iostream>
#include <vector>
using::std::vector;
#include <vector>
using::std::vector;
class Solution
{
public:
vector<int>twoSum(vector<int>&nums,int target)
{
int i,j;
for(int i=0;i < nums.size();i++)
{
for(j=i+1;j < nums.size();j++)
{
if(nums[i]+nums[j]==target)
{
std::cout << i << ' '<< j;
return {i,j};
}
}
}
return { };
}
};
{
public:
vector<int>twoSum(vector<int>&nums,int target)
{
int i,j;
for(int i=0;i < nums.size();i++)
{
for(j=i+1;j < nums.size();j++)
{
if(nums[i]+nums[j]==target)
{
std::cout << i << ' '<< j;
return {i,j};
}
}
}
return { };
}
};
int main()
{
vector<int> a = {1,1,2,2,1,3,4,3};
Solution b;
b.twoSum(a,4);
}
{
vector<int> a = {1,1,2,2,1,3,4,3};
Solution b;
b.twoSum(a,4);
}
测试结果: