Leetcode 解析之两数之和

力扣(LeetCode)是一个著名的在线编程平台,提供了许多算法和数据结构相关的编程题目,

是程序员求职面试,大学生编程竞赛刷题的常用平台网站。

对于“两数之和“这道题,刷过力扣的小伙伴一定不陌生,因为这是LeetCode的第一题,可以说是刷题的起点。

题目描述如下:

看到这道题目,很容易想到暴力求解,用两层for循环,时间复杂段为O(N2)。

本文提供另一种解法,使用哈希表来记录遍历过的数,这样遍历下一个数时,只需要查找哈希表中有没有与当前数相加之和是target的数就好。

解题思路:

创建一个哈希表(字典),用于存储每个元素的值和索引。

遍历数组,检查target与当前元素差值是否在哈希表中:

如果存在,则返回差值的索引和当前索引;

如果不存在,在哈希表中记录当前元素与索引值,继续遍历下一个元素。

如果遍历完整个数组后仍然没有找到答案,则返回{0,0}。

这种解法将算法的时间复杂度降到了N*O(1).

代码实现如下:

    vector<int> twoSum(vector<int>& nums, int target) {

        map<int,int> visited;

        for(int i = 0; i < nums.size();++i)

        {

            auto it = visited.find(target - nums[i]);

            if(it != visited.end())

            {

                return {it->second,i};

            }

            visited.insert(std::pair(nums[i],i));

        }

        return {0,0};

       

    }

在LeetCode平台运行结果:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

攻城狮Soar

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

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

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

打赏作者

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

抵扣说明:

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

余额充值