Leetcode 之第一题 two sum

本文详细解析了LeetCode第一题两数之和,包括三种解法:双层循环、排序加双指针和哈希表。每种方法的时间和空间复杂度分析,帮助理解不同算法效率。

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

leetcode 第一题 two sum

这一题的大意是有一组数,给出一个和,然后从这组数找出两个数,它们相加等于和,返回这两个数的下标。

这一题据我所知共有三种解法:

1.就是最简单的双重循环,用和减去外层循环中的数,然后在内层循环中找到差。这样子时间复杂度为O(n2),空间复杂度为O(1)。

2.第二种解法就是把这组数进行快速排序,使得它们从小到大排序。然后两个指针分别从头和尾遍历,如果相加大于和,则将尾指针减一,如果小于和,则将头指针加一。如果等于和,那么就在原来的数组中找到目前数字的下标。这时的时间复杂度为O(log2n)+O(n),因为要保存原来的数字的排序,所以空间复杂度为O(n)。

3.第三种就是哈希了。使用map数据结构。此时又有两种略微不同的解法。

①.因为这组数可能会有相同的数字,所以使用multimap数据结构。第一种是先建立multimap结构,将目前元素的值作为multimap的关键字,元素的下标作为multimap的值。然后遍历multimap,搜索和减去其中一个数的差,返回搜索到的关键字的值。

此时需要遍历两边map,时间复杂度为O(n),空间复杂度为O(n)。

②.第二种是先遍历这组数,然后同时建立map结构,如果差在map中已经存在,则将此时map的值和在原来数组的下标返回。

此时只需遍历一遍map,时间复杂度为O(n),空间复杂度为O(n)。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值