您的位置:首页 > Web前端 > JavaScript

leetCode解题记录1 - 两数之和(JS,TS,PY版)

2020-03-13 18:31 375 查看
  • 作者:陈大鱼头
  • 项目地址:ying-leetcode
  • 碎碎念:Mmmmm,不定期刷leetcode,会以JS TS PY的形式输出出来

题目描述

给定一个整数数组 nums 和一个目标值 target,

请你在该数组中找出和为目标值的那 两个 整数,

并返回他们的数组下标。

你可以假设每种输入只会对应一个答案。

但是,你不能重复利用这个数组中同样的元素。

给定 nums = [2, 7, 11, 15], target = 9,

因为 nums[0] + nums[1] = 2 + 7 = 9,

所以返回 [0, 1]

解题思路

看到题目第一时间想到的就是冒泡,但是既然是正经刷LeetCode,写个冒泡就有点尴尬了,那么有没有时间复杂度低一点的计算方式呢?想了一下就选择了HASH的方式,思路就是定义一个保存数据的对象,然后循环查询数组,然后要做的一点当然就是将当前循环到的数字当成键,地址当成值,插入对象中,然后计算当前目标结果与当前数字的差,再判断这个差是不是已经在对象里,如果在,就说明这两个就是结果,遂输出,不然就继续循环。

JS版

/**
* @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
}
}

TS版

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
}
}

PY版

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

如果你喜欢探讨技术,或者对本仓库有任何的意见或建议,非常欢迎加鱼头微信好友一起探讨,当然,鱼头也非常希望能跟你一起聊生活,聊爱好,谈天说地。 鱼头的微信号是:krisChans95 也可以扫码添加好友,备注“博客”就行

  • 点赞
  • 收藏
  • 分享
  • 文章举报
陈大鱼头 发布了30 篇原创文章 · 获赞 554 · 访问量 14万+ 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: