本文主要是介绍[补题记录]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;}
};
这篇关于[补题记录]LeetCode 167.两数之和 II - 输入有序数组的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!