Leetcode | C++ 1.TwoSum

该博客主要讲解LeetCode中的1.TwoSum问题,通过C++语言利用哈希表实现寻找数组中两数之和为目标值的下标。算法思路是遍历数组,对于每个元素,检查哈希表中是否存在目标值减去该元素的值,若存在则返回两个下标,否则将元素存入哈希表。时间复杂度为O(n)。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题意

中文描述
给定一个数组,返回数组中两个数的索引(下标),使得这两个数的和是一个特殊的目标值.
可以假定每组输入都有一个确切的输出,并且一个元素不会使用两次.

题解

算法及复杂度(9ms)

先从算法角度进行思考,本题就是要知道两个数,这两个数的和是一个给定的数。很容易的想法就是对每个数num[i],求出rest = target-num[i].然后在数组中查找rest是否存在.不存在就继续进行,存在就直接返回结果.
这样直接总的时间复杂度可能是O(n^2),因为我们需要进行n的查询,每次查询时间最坏能达到n的量级.一个很小的trick就是,有一种方法可以使在一个数列中查询一个数是否存在的时间复杂度为O(1),那就是使用hash的方法.这样就可以把总的时间复杂度降到O(n).
如果这个题目是在ACM中出现,通常会对数组大小有一个限制,常用的做法是把给定的数组hash到一个比较大的数组中,每次查询的时间复杂度是O(1),总的时间复杂度是O(n)(n表示输入的数组的长度).
但是,本题使用的是vector,并且没有长度的限制.算法就在那里,时间复杂度也是给定的.在C++11标准中,在标准STL库添加了unordered_map,这个是给予hash表的map,区别于STL中的map

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小夕Coding

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

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

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

打赏作者

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

抵扣说明:

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

余额充值