Leetcode第1题,求两数之和。
原地址
题目描述
给定一个整数数组mums和一个整数目标值target,请你在该数组中找出和为目标值target的那两个整数,并返回它们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中一个元素在答案里不能重复出现。
你可以按任意顺序返回答案。
示例1:
1 | 输入:nums = [2,7,11,15],target = 8 |
示例2:
1 | 输入:nums = [3,2,4], target = 6 |
示例3:
1 | 输入:nums = [3,3], target = 6 |
提示:
- 2 <= nums.length <= 104
- -109 <= nums[i] <= 109
- -109 <= target <= 109
- 只会存在一个有效答案
解答
简单来说,就是从给定的数组中找到两个数字,使它们的和等于目标值即可。
最常规的做法,就是两层的for循环,对于数组里的每一个数字,分别和其他的所有数字分别求和,判断是否等于目标值,等于则退出循环,返回角标即可,复杂度为O(n^2)。
进阶
像这种循环遍历的题目,都可以通过空间换时间的思路,来给出另一种解法。
额外创建一个map来存储临时结果,key是数字,value是角标,通过一次循环遍历,对于每一个数字,只需要看map中是否存在相加和为目标值的数字,有则退出循环,没有则将这个数字加到map中,少了一层循环,所以复杂度只有O(n)。
时间换空间的思路是通用的,同时,反过来空间换时间也可以。