两数之和
1 暴力法
这种方法使用是根据题目要求来直接依据数组中两数之和等于目标数组来寻找,通过将目标数组减去给出数组中的第一个数,来获取检测数,用检测数对数组进行第二次遍历寻找来获得
```cpp
在这里插入代码片
class Solution
{
public:
vectortwoSum(vector &nums, int target)
{
vector res;
int numsSize = int(nums.size()); /定义字符串长度值/
for (int index = 0; index < numsSize;index++) /*进行遍历,将数组中每个数与目标值做一遍减法,获取验证数值*/
{
int b = target - nums[index];
for (int index2 = 0; index2 < numsSize; index2++) /*对数组遍历第二遍,寻找数组中与只匹配的数值*/
{
if (nums[int(index2)] == b)
{
res.push_back(index); /*返回目标值一的下标*/
res.push_back(index2); /*返回目标值二的下标*/
}
}
}
return res;
}
};
2 哈希表法
这种方法原理上我个人觉得和暴力法挺像的,只不过借助哈希表进行检索,当被减的数值通过目标值和数组中的值得出的时候,就可以通过哈希表检索,看有没有和这个数值想到等的数,有就直接返回这个数的下标,这种方法相对于直接法来说,更为简便化,在哈希表存储的过程中就有下标值和数值两个数值,这样当我们在得知这个数值是多少的时候就可以很快的知道它对应的标值是多少,而不用费力去 进行二遍检索。
```cpp
```cpp
在这里插入代码片class Solution
{
public:
vector<int> twoSum(vector<int> &nums, int target)
{
unordered_map<int,int> hash;
vector<int>result; /* 定义一个哈希表,其中一个值代表的是数值,另一个代表的是该数值对应的下标,方便索引
int numsSize = int(nums.size());
for (int i = 0; i< numsSize;i++) /*将数组中的值逐渐和目标值进行减法,获取目标值
{
int numberTOFind = target - nums[i];
if(hash.find(numberTOFind) !=hash.end()) /*检索哈希表,如果数值在哈希表中则将相应的数值的下标值返回
{
result.push_back(hash[numberTOFind]);
result.push_back(i);
return result;
}
}
return result; /*返回此时的结果值结果值为两次数的下标值
}
};
由于本人编程能力有限,用上述算法思路编出的程序总是出现错误,所以采取别的大佬的程序,结合我的心得来阐述一下我的心得,该程序转载与:
https://leetcode-cn.com/problems/two-sum/solution/liang-shu-zhi-he-cshi-xian-liang-chong-jie-fa-bao-/
原文作者:pinku-2
来源:
力扣(LeetCode)