题目:https://leetcode-cn.com/problems/two-sum/
以下代码使用C++语言,但是不影响阅读。
方法一:暴力法
该题使用暴力法很简单,只需要将target减去nums中的元素并且在遍历一下是否存在与之相等的元素。
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target)
{
for(int i=0;i<nums.size();i++)
{
int less = target - nums[i];
for(int u = i+1;u<nums.size();u++)
{
if(less == nums[u])
return vector<int> {i,u};
}
}
return vector<int> {};
}
};
这个方法的时间复杂度是O(n²)
方法二:哈希表
先将nums中的值和下标写进哈希表中,跟暴力法一样,我们需要查找target减去的nums中的值是否在哈希表中。如果存在则返回他们的下标
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target)
{
map<int, int> compare;
for (int i = 0; i < nums.size(); i++)
compare.insert({ nums[i],i });
for (int i = 0; i < nums.size(); i++)
{
int aim = target - nums[i];
if (compare.find(aim) != compare.end() && compare.find(aim)->second != i)
{
return vector<int> {i,compare.find(aim)->second};
}
}
return vector<int> {};
}
};
笔者也是一个刚开始学算法的小白,所以大佬轻喷,如果有更好的解法希望能评论告诉我,我可以学习,提前谢过(抱拳)