[补题记录]LeetCode 167.两数之和 II - 输入有序数组
StarryCoding 是面向计算机专业学生的综合学习与刷题平台,欢迎同学们的加入!
传送门:两数之和 II - 输入有序数组
Thought/思路
答案只需要返回两个下标,表示和为 target
的两个数。
我们可以用一个 map<int, vector>
维护原数组
每个数存在哪些下标,然后对于每一个元素,查看是否存在它与 target
的差值。
当差值存在,并且 vector
中存在的元素与当前下标不是同一个时,就说明找到了答案。
Code/代码
class Solution {
public:
vector<int> twoSum(vector<int>& numbers, int target) {
std::map <int, std::vector <int>> mp;
for (int i = 0; i < numbers.size(); ++ i) {
mp[numbers[i]].push_back(i);
}
std::vector <int> ans;
for (int i = 0; i < numbers.size(); ++ i) {
int next = target - numbers[i];
if (mp.count(next) && mp[next].size() > 0) {
for (auto &item : mp[next]) {
if (item != i) {
ans.push_back(i + 1);
ans.push_back(item + 1);
break;
}
}
}
if (ans.size() == 2) break;
}
return ans;
}
};