两数之和(牛客网)c++实现
题目:给出一个整数数组,请在数组中找出两个加起来等于目标值的数
解答:
思路一:暴力解法: 两遍for循环,遍历数组,时间复杂度O(N2)
class Solution {
public:
/**
*
* @param numbers int整型vector
* @param target int整型
* @return int整型vector
*/
vector<int> twoSum(vector<int>& numbers, int target) {
// write code here
//暴力方法,两遍for循环
vector<int> res;
for(int i=0;i<numbers.size();i++)
{
for(int j=i+1;j<numbers.size();j++)
{
if(numbers[i]+numbers[j]==target)
{
res.push_back(i+1);
res.push_back(j+1); //注意下标是从1开始的;
}
}
}
return res;
}
};
思路二:for循环遍历第一个数,第二个数用set或者map
class Solution {
public:
/**
*
* @param numbers int整型vector
* @param target int整型
* @return int整型vector
*/
vector<int> twoSum(vector<int>& numbers, int target) {
// write code here
//map
vector<int> res;//c存放输出的下标值
map<int,int> mp;
for(int i=0;i<numbers.size();i++)
mp[numbers[i]]=i;
for(int i=0;i<numbers.size();i++)//数组中的a;
{
if(mp.find(target-numbers[i])!=mp.end()&&i!=mp[target-numbers[i]])
{
res.push_back(i+1);//输入a的下标;
res.push_back(mp[target-numbers[i]]+1);
return res;
}
}
return res;
}
};