leetCode解題記錄1 - 兩數之和

lvxfcjf發表於2021-09-09

題目描述

給定一個整數陣列 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



來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/3486/viewspace-2823854/,如需轉載,請註明出處,否則將追究法律責任。

相關文章