题目
题目描述
给出一个整数数组,请在数组中找出两个加起来等于目标值的数,
你给出的函数twoSum 需要返回这两个数字的下标(index1,index2),需要满足 index1 小于index2.。注意:下标是从1开始的
假设给出的数组中只存在唯一解
例如:
给出的数组为 {20, 70, 110, 150},目标值为90
输出 index1=1, index2=2
示例1
输入
[3,2,4],6
返回值
[2,3]
解析
暴力——o(n^2)
直接遍历所有可能暴力求解。
class Solution {
public:
/**
*
* @param numbers int整型vector
* @param target int整型
* @return int整型vector
*/
vector<int> twoSum(vector<int>& numbers, int target) {
// write code here
int i=-1,j=-1;
for(i=0;i<numbers.size();++i){
for(j=i+1;j<numbers.size();++j){
if(numbers[i]+numbers[j]==target){
return {i+1,j+1};
}
}
}
return {-1,-1};
}
};
哈希表——o(n)
降低时间复杂度,用空间换时间。
利用hash表存储number的位置,第二次遍历时,检查是否有numbers[i]对应的target-numbers[i]存在。
class Solution {
public:
/**
*
* @param numbers int整型vector
* @param target int整型
* @return int整型vector
*/
vector<int> twoSum(vector<int>& numbers, int target) {
map<int,int> imap;
for(int i=0;i<numbers.size();++i){
imap[numbers[i]]=i;
}
for(int i=0;i<numbers.size();++i){
int tmp = target-numbers[i];
// cout<<tmp<<endl;
if(imap.count(tmp)>0&&i!=imap[tmp]){
return {i+1,imap[tmp]+1};
}
}
return {-1,-1};
}
};

2035

被折叠的 条评论
为什么被折叠?



