- 作者:陳大魚頭
- 項目地址: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 也可以掃碼添加好友,備註“博客”就行