leetCode解題記錄1 - 兩數之和(JS,TS,PY版)

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

wx-qrcode

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章