鼠鼠有个打算,从今天开始刷力扣,今天先看第一题,两数之和。
最开始看到的时候一眼就会想到暴力解,取两个for循环,分别遍历数组中的元素,寻找到满足条件的组合,然后输出
暴力代码
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;j<n;j++)
{
if(nums[j]+nums[i]==target)
{
if(i==j)continue;
return {i,j};
}
}
}
return {};
}
};
优化解,哈希表
这里对哈希表进行一些解释,按照我的理解,哈希表包括三个部分 输入,输出,哈希函数
输入x,通过哈希函数,在map里寻找与x对应的y,前提是有对应的y,才能输出y
流程如下
代码
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
// int n=nums.size();
unordered_map<int ,int>has;
for(int i=0;i<nums.size();i++)
{
int num=target-nums[i];
if(has.find(num)!=has.end())
{
return {has[num],i};
}
has[nums[i]]=i;
}
return {-1,-1};
return {};
}
};