Problem: 1. 两数之和
思路
首先定义一个unordered_map<int, int> heap
, 用来记录数组nums
中对应的数的下标
然后在一个for循环里遍历nums
数组
用r记录target与当前数组的值的差值,再从当前数的前面找有没有这个差值,也就是heap.count(r)
, 如果有则返回{heap[r], i}
, 如果没有就把当前的数以及它的下标记录进map,heap[nums[i]] = i;
最后因为力扣的严谨,循环外加一个return {};
解题过程
根据思路直接用c++打出来即可
复杂度
时间复杂度:
O(n)
空间复杂度:
O(n)
Code (c++)
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
unordered_map<int, int> heap;
for (int i = 0; i < nums.size(); i ++)
{
int r = target - nums[i];
if (heap.count(r))
return {heap[r], i};
heap[nums[i]] = i;
}
return {};
}
};
作者:Focused Maxwell5f0(即是我本人,你们也可以去关注我的力扣账号(*^▽^*)
)
链接:https://leetcode.cn/problems/two-sum/solutions/2967806/liang-shu-zhi-he-ti-jie-by-focused-maxwe-6md1/
来源:力扣(LeetCode)