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;}
};