leetCode解題記錄1 - 兩數之和

  • 做者:陳大魚頭
  • 項目地址: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

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
複製代碼

若是你、喜歡探討技術,或者對本文有任何的意見或建議,你能夠掃描下方二維碼,關注微信公衆號「 魚頭的Web海洋 」,隨時與魚頭互動。歡迎!衷心但願能夠碰見你。spa

qrcode-base
相關文章
相關標籤/搜索