参考: [https://blog.csdn.net/cat1992/article/details/80372617]
leetcode 算法部分
1、两数之和
暴力查找,时间复杂度O(n*n)
//语言C++,方法简单直接两个for循序得到结果。
//执行用时: 164 ms, 在Two Sum的C++提交中击败了28.22% 的用户
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
vector<int> vec;
for(int i=0;i<nums.size();++i)
for(int j=i+1;j<nums.size();++j)
if(target==(nums[i]+nums[j]))
{
vec.push_back(i);
vec.push_back(j);
return vec;
}
//如果在此执行 return vec;花费时间更多(188ms)
}
};
利用map来实现
// 两数之和,复杂度O(n)
//key是数组的值,value是数组的下标
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
vector<int> vec;
map<int,int> m;
for(int i=0;i<nums.size();++i)
{
m[nums[i]]=i;
}
for(int i=0;i<nums.size();++i)
{
int temp=target-nums[i];
if(m.count(temp)&&m[temp]!=i){
vec.push_back(i);
vec.push_back(m[temp]);
return vec;
}
}
}
};