两数之和
问题描述:
给一个整数数组,找到两个数使得他们的和等于一个给定的数 target。
你需要实现的函数twoSum需要返回这两个数的下标, 并且第一个下标小于第二个下标。注意这里下标的范围是 1 到 n,不是以 0 开头。
样例给出 numbers = [2, 7, 11, 15], target = 9, 返回 [1, 2].
解题思路:
先定义两个数组,不妨设为a,b把给定的整数数组遍历一遍,把每次遍历到的值放入a中,其下标放入b中。遍历a,若a中有两个数其和为给定的数target,则把其下标插到新建立的向量中,返回此向量即可。
代码实现:
class Solution {
public:
/*
* @param numbers : An array of Integer
* @param target : target = numbers[index1] + numbers[index2]
* @return : [index1+1, index2+1] (index1 < index2)
*/
vector<int> twoSum(vector<int> &nums, int target) {
// write your code here
vector<int>::iterator nit;
int flag=1;
int a[100000];
int b[100000];
int i=0;
vector<int>r;
for(nit=nums.begin();nit!=nums.end();nit++){
a[i]=*nit;
b[i]=flag;
i++;
flag++;
}
for(int j=0;j<i;j++){
for(int l=j+1;l<i;l++){
if(a[j]+a[l]==target){
r.push_back(b[j]);
r.push_back(b[l]);
}
}
}
return r;
}
};
A题感悟:
此题较简单,注意整型数既有正数也有负数即可。