目录
**作者的个人gitee**
每日一言:" 愿你纵踩淤泥,也要心向光明。🌸🌸**"**
一.题目

题目链接
二.解题过程
题目解析
题目要求比较简单,只需要找到两个值的和等于目标值,可以通过暴力枚举直接找到,也可以使用++哈希++查找降低时间复杂度。
方法一(暴力求解)
思路
直接暴力枚举所有情况:两层for循环遍历数组,找出两个数的和刚好等于target的情况,然后返回这两个数的索引。时间复杂度:O(n^2)。
代码
cpp
class Solution
{
public:
vector<int> twoSum(vector<int>& nums, int target)
{
//数组长度为len,两数之和为sum
int len = nums.size(),sum = 0;
//遍历数组
for(int i = 0;i<len;i++)
for(int j = i+1;j<len;j++)
{
//求和
sum = nums[i]+nums[j];
//判断是否与目标值相等,相等就返回
if(sum == target)
return {i,j};
}
//假如以上条件都不满足,则返回[-1,-1](此举是为了照顾leetcode编译器,编译器要求必须要有一个返回值)
return {-1,-1};
}
};
提交结果

方法二(哈希查找)
思路
方法一时间复杂度较高,我们不妨使用哈希表来优化查找过程,哈希表每一次查找的时间复杂度是O(1)。已知目标值target和其中一个值value,则我们在哈希表中只需要查找target-value的值(代码中为key),这样我们在n个元素的数组中查找一个目标值的时间复杂度就是O(1)*n = O(n)。
代码
cpp
class Solution
{
public:
vector<int> twoSum(vector<int>& nums, int target)
{
//创建哈希表
unordered_map<int, int> hash;
//遍历数组
for (int i = 0; i < nums.size(); i++)
{
//初始化当前的值value
int value = nums[i];
//初始化要找的值key
int key = target - value;
//在哈希表中找key,使entry指向key。如果没有找到的话就entry就指向hash.end()
auto entry = hash.find(key);
//没有指向end就说明找到了
if (entry != hash.end())
{
//返回这两个数的索引
return {entry->second, i};
}
//如果哈希表中不存在值为key的元素,则将当前遍历到的元素及其索引存入哈希表,以便后续继续查找。
hash[value] = i;
}
//最终没有找到符合要求的key,则返回[-1,-1],原因同方法一。
return {-1,-1};
}
};
提交结果
