找满足和为target的两数下标,最主要是要能快速根据数找到下标。 可以先建立数与下标的映射map。然后用i遍历数组,根据target与当前数计算出另一个数,然后在map中找,能找到,则很快能得到两数下标。
class Solution {
public:
vector<int> twoSum(vector<int>& numbers, int target) {
map<int,int> numIndexMap;
vector<int> ret;
for (int i = 0; i < (int)numbers.size(); i++)
{
numIndexMap[numbers[i]] = i;
}
for (int i = 0; i < (int)numbers.size(); i++)
{
int &num1 = numbers[i];
int num2 = target - num1;
if (numIndexMap.find(num2) != numIndexMap.end())
{
int j = numIndexMap[num2];
if (i != j)
{
ret.push_back(min(i + 1, j + 1));
ret.push_back(max(i + 1, j + 1));
break;
}
}
}
return ret;
}
};