方法一(暴力解法:双指针):
实现思路
先固定第一个数,然后在该数的后面一次遍历,直到两数之和相加等于目标值,返回下标
实现代码
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
int n=nums.size();
vector<int>re;
for(int i=0;i<n-1;i++){
for(int j=i+1;j<n;j++){
if(nums[i]+nums[j]==target)
{
re.push_back(i);
re.push_back(j);
return re;
}
}
}
return re;
}
};
提交结果及分析
时间复杂度O(n^2)
方法二(哈希表)
遍历到某一数值时,查看target-数值的元素是否在hash表中,如果不在将该元素存入hash表中,利用该hash表判断,直到有两个元素相加等于target,返回下标即可
实现代码
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
map<int,int> nmap;
vector<int>re;
int n=nums.size();
for(int i=0;i<n;i++){
if(nmap.count(target-nums[i])!=0)
{
re.push_back(i);
re.push_back(nmap[target-nums[i]]);
}
else{
nmap[nums[i]]=i;
}
}
return re;
}
};
提交结果及分析
时间复杂度为O(n)