题目
题解
方法1 暴力解法
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
//暴力解法
int n = nums.size();
for(int i = 0; i<n; i++)
{
for(int j = i+1; j<n; j++)//每一个元素不能被使用两次,所以只需要在x后面的元素中即可
{
if(nums[i] + nums[j] == target)
{
return{i,j};
}
}
}
return {};
}
};
方法2:
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
//哈希表
unordered_map<int, int> mp;
//需要返回的结果是下标 key是值 value是当下的值(如果有的话)所在的下标
// for(int i = 0;i<nums.size(); i++)
// {
// mp[nums[i]] = i;
// }
//直接都装map里,还要再遍历map 不合适
for(int i = 0; i<nums.size(); i++)
{
//map是会初始化的
auto it = mp.find(target - nums[i]);
if(it != mp.end())
{
return{i, it->second};
}
mp[nums[i]] = i;
}
return {};
}
};
/*
过程:一开始map是空的,就往map里填数据,遍历到后面的就可以去map里找了这样如果有结果的话遍历一遍就一定能找到
*/