- 做者:陈大鱼头
- 项目地址:ying-leetcode
- 碎碎念:Mmmmm,不按期刷leetcode,会以JS TS PY的形式输出出来
给定一个整数数组 nums 和一个目标值 target,javascript
请你在该数组中找出和为目标值的那 两个 整数,java
并返回他们的数组下标。python
你能够假设每种输入只会对应一个答案。git
可是,你不能重复利用这个数组中一样的元素。github
给定 nums = [2, 7, 11, 15], target = 9,typescript
由于 nums[0] + nums[1] = 2 + 7 = 9,数组
因此返回 [0, 1]微信
看到题目第一时间想到的就是冒泡,可是既然是正经刷LeetCode,写个冒泡就有点尴尬了,那么有没有时间复杂度低一点的计算方式呢?想了一下就选择了HASH的方式,思路就是定义一个保存数据的对象,而后循环查询数组,而后要作的一点固然就是将当前循环到的数字当成键,地址当成值,插入对象中,而后计算当前目标结果与当前数字的差,再判断这个差是否是已经在对象里,若是在,就说明这两个就是结果,遂输出,否则就继续循环。ui
/** * @param {number[]} nums * @param {number} target * @return {number[]} */
const twoSum = (nums, target) => {
const obj = {}
for (let i = 0, len = nums.length; i < len; ++i) {
const data = nums[i]
const res = target - data
if (res in obj) {
return [obj[res], i]
}
obj[data] = i
}
}
复制代码
interface objType {
[propName: string]: number
}
/** * @param {number[]} nums * @param {number} target * @return {number[]} */
const twoSum = (nums: number[], target: number): number[] | undefined => {
const obj: objType = {}
for (let i: number = 0, len: number = nums.length; i < len; ++i) {
const data: number = nums[i]
const res: number = target - data
if (res in obj) {
return [obj[res], i]
}
obj[data] = i
}
}
复制代码
class Solution:
""" :type arg1: List[int] :param nums: :type arg2: int :param target: :rtype: (List[int], None) :return: """
def twoSum(self, nums: List[int], target: int) -> (List[int], None):
obj = {}
for i, data in enumerate(nums):
res = target - data
if res in obj:
return [obj[res], i]
obj[data] = i
return None
复制代码
若是你、喜欢探讨技术,或者对本文有任何的意见或建议,你能够扫描下方二维码,关注微信公众号“ 鱼头的Web海洋 ”,随时与鱼头互动。欢迎!衷心但愿能够碰见你。spa