力扣前1500道非會員題刷題筆記

Sunyehh發表於2024-10-27

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)

相關文章