oynix

于无声处听惊雷,于无色处见繁花

Leetcode1 两数之和

Leetcode第1题,求两数之和。

原地址

题目描述

给定一个整数数组mums和一个整数目标值target,请你在该数组中找出和为目标值target的那两个整数,并返回它们的数组下标。

你可以假设每种输入只会对应一个答案。但是,数组中一个元素在答案里不能重复出现。

你可以按任意顺序返回答案。

示例1:

1
2
3
输入:nums = [2,7,11,15],target = 8
输出:[0,1]
解释:因为nums[0] + nums[1] == 9,返回[0,1]

示例2:

1
2
输入:nums = [3,2,4], target = 6
输出:[1,2]

示例3:

1
2
输入:nums = [3,3], target = 6
输出:[0,1]

提示:

  • 2 <= nums.length <= 104
  • -109 <= nums[i] <= 109
  • -109 <= target <= 109
  • 只会存在一个有效答案

解答

简单来说,就是从给定的数组中找到两个数字,使它们的和等于目标值即可。

最常规的做法,就是两层的for循环,对于数组里的每一个数字,分别和其他的所有数字分别求和,判断是否等于目标值,等于则退出循环,返回角标即可,复杂度为O(n^2)。

进阶

像这种循环遍历的题目,都可以通过空间换时间的思路,来给出另一种解法。

额外创建一个map来存储临时结果,key是数字,value是角标,通过一次循环遍历,对于每一个数字,只需要看map中是否存在相加和为目标值的数字,有则退出循环,没有则将这个数字加到map中,少了一层循环,所以复杂度只有O(n)。

时间换空间的思路是通用的,同时,反过来空间换时间也可以。

------------- (完) -------------
  • 本文作者: oynix
  • 本文链接: https://oynix.com/2022/11/4d7787912d0e/
  • 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!

欢迎关注我的其它发布渠道