0 题目
给一个整数数组nums和一个整数目标值target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。
输入:nums = [2,7,11,15], target = 9
输出:[0,1]
解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。
1 方法一:暴力求解
class Solution {
public:
//创建一个容器 输入参数为一个int数组和一个int类型自变量
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)
{
if(nums[i]+nums[j]==target)
{
return {i, j}
}
}
}
}
};
2 方法二:哈希表(HashTable)
哈希表:类似c#键值对,键key 对应 值value
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) //容器
//声明一个哈希表 unordered_map表示无序容器
//<int,int>分别是键key和值value的类型
unordered_map<int, int> hashtable;
{
int n=nums.size();
for(int i=0;i<n;++i)
{
//auto 自动识别it的类型
//hashtable为键值对 则it为vector类型
//若键key在容器中存在,则返回键值对的值value。
//反之则一返回end()-最后一个键值对的值value
auto it=hashtable.find(target-nums[i]);
//如果it不等于最后一个键值对的值value,即找到
if(it!=hashtable.end())
{
//it->first 表示的是这个元素的key的值;
//it->second 表示的是这个元素的value的值
return {it->second,i};
}
//没有找到,将该数nums[i]加入哈希表
hashtable[nums[i]] = i;
}
return{}
}
};