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)