LeetCode-Array-1. Two Sum

这篇博客讨论了LeetCode上的经典问题-Array-1. Two Sum。问题要求在给定整数数组中找到两个数,使得它们的和等于特定目标值。文章分析了两种解法:一种是简单的双层循环,时间复杂度为O(n^2),另一种是使用哈希映射,时间复杂度优化为O(n)。作者详细解释了哈希映射的实现思路,并给出了相应的C++代码实现。
摘要由CSDN通过智能技术生成

问题:https://leetcode.com/problems/two-sum/

Given an array of integers, return indicesof the two numbers such that they add up to a specific target.You may assumethat each input would have exactly one solution.

Example:Given nums = [2, 7, 11, 15], target= 9,

Because nums[0] + nums[1] = 2 + 7 =9,return [0, 1].

给定一个数组和一个值,找数组中两个元素加起来和是这个值的索引。

思考1:用两个for循环,很容易解出问题,但是消耗时间长,O(n2)的复杂度。注意要用一个数组来放索引值。

代码1


思考2:现在想用更小的时间复杂度解题,既然优化了时间复杂度,就要牺牲空间复杂度,是用stack?queue?vector?还是hash_map?对于stack和queue,除了pop外,查找的时间复杂度也是O(n),而hash_map最理想的情况下时间复杂度是O(1)。现将数组中所有的元素都存到hash_map中,一次循环,时间复杂度是O(n)。用一个<number, index>的map, 记录每个一字出现的位置。逐个去检查数字,看看他要凑成对的那个数字是不是已经存在了即可。map里直接存的是要去找的那个数。比如target=9, 现在在位置0遇到了2,那存一个map[9-2]=0,然后检查的时候就可以直接去keys里面找有没有7了。

代码2:



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值