Leetcode1.两数之和——简洁易懂

简洁易懂讲清原理,讲不清你来打我~

输入一个数组和一个整数,从数组中找到两个元素和为这个整数,输出下标
在这里插入图片描述
在这里插入图片描述

模拟法

for i找第一个元素,对于这个元素,向后for j=i+1寻找第二个元素,当元素和为输入的整数就输出下标

class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) {
        int n = nums.size();
        for (int i = 0; i < n-1; ++i) {
            for (int j = i + 1; j < n; ++j) {
                if (nums[i] + nums[j] == target) {
                    return {i, j};
                }
            }
        }
        return {};
    }
};

哈希表

当for i找到其中一个元素时,如果在哈希表中已经存放了i之前元素,就可以立刻找到另一个元素,当元素和为输入的整数就输出下标

class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) {
        unordered_map<int,int>numToIndex;
        for(int i=0;i<nums.size();++i){
            auto iter=numToIndex.find(target-nums[i]);
            if(iter!=numToIndex.end()){
                return {iter->second,i};
            } 
            numToIndex[nums[i]]=i;
        }
        return {};       
    }
};

喜欢简洁易懂还能讲清楚原理博客的小伙伴就关注关注这个非常高产的博主呀,下次再会~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值