70、【哈希表】leetcode——1. 两数之和(C++/Python版本)

题目描述

在这里插入图片描述
在这里插入图片描述
原题链接:1. 两数之和

一、采用Hash表

目标是求两数之和的下标,采用unordered_map设置Key为求和之值Value为对应元素下标。每次先查找之前是否有另一个数在存储中,若在则返回答案,若不在则加入到其中。

class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) {
        unordered_map<int, int> record;
        for(int i = 0; i < nums.size(); i++) {
            auto it = record.find(target - nums[i]);
            if(it != record.end()) {
                return {it->second, i};     // 找到返回第一个下标和第二个下标
            }
            // record.insert(pair<int, int>(nums[i], i));
            record[nums[i]] = i;    // 注意:因为可能出现二倍的数为目标之和,为避免仅有一个数而提前判定已在存储中,因此需要先判定再存储Key-Value。
        }
        return {};      // 未找到返回{}
    }
};

时间复杂度: O ( n ) O(n) O(n)
空间复杂度: O ( n ) O(n) O(n)

Python

class Solution:
    def twoSum(self, nums: List[int], target: int) -> List[int]:
        record_index = {}
        res = []
        for i in range(len(nums)):
            other_num = target - nums[i]
            if other_num in record_index.keys():
                res = [record_index[other_num], i]
                break
            else:
                record_index[nums[i]] = i        
        
        return res

二、排序+双指针

可以下排序,然后再用双指针方式,设置一个首指针,设置一个尾指针,利用数组中的单调性遍历。直至找到nums[i] + nums[j] == target

AcWing 800. 数组元素的目标和

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

辰阳星宇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值