Stories

Detail Return Return

LeetCode熱題一之兩數之和 - Stories Detail

本文首發於公眾號:Hunter後端

原文鏈接:LeetCode熱題一之兩數之和

題目

給定一個整數數組 nums 和一個整數目標值 target,請你在該數組中找出和為目標值 target 的那兩個整數,並返回它們的數組下標。

你可以假設每種輸入只會對應一個答案,並且你不能使用兩次相同的元素。

你可以按任意順序返回答案。

題目來源

此題來源於 LeetCode 題庫序號 1。

LeetCode 鏈接

示例

示例 1

輸入:nums = [2,7,11,15], target = 9

輸出:[0,1]

解釋:因為 nums[0] + nums[1] == 9 ,返回 [0, 1] 。

示例 2

輸入:nums = [3,2,4], target = 6

輸出:[1,2]

示例 3

輸入:nums = [3,3], target = 6

輸出:[0,1]

題解

對於這道題,要在一個數組中找兩個元素,使得他們的和為目標值 target,第一反應是需要雙重遍歷數組,第一重挨個遍歷數組元素作為第一個值,第二重是從該元素往後開始遍歷作為第二個值,判斷這兩個值之和是否等於目標值。

其偽代碼大致如下:

for i in range(len(nums) - 1):
    for j in range(i + 1, len(nums)):
        if nums[i] + nums[j] == target:
            return 

但是這個操作需要雙重遍歷數組,其時間複雜度為 n^2,因此,可以尋求一個時間複雜度更小的做法。

我們可以額外建立一個哈希表,key 為元素,value 為元素的索引,每次遍歷到的元素 x 可以先查一下哈希表看 target-x 是否存在,存在的話説明我們已經找到了兩個目標元素,不存在的話就將元素 x 存入表中。

以下是偽代碼:

itemDict = {}
for i in range(len(nums) - 1):
    item = nums[i]
    if itemDict.get(target - item) != None:
        return [itmDict[target-item], i]
    else:
        itemDict[x] = 1

代碼

Python 代碼

from typing import List


class Solution:
    def twoSum(self, nums: List[int], target: int) -> List[int]:
        itemDict = dict()
        for i, item in enumerate(nums):
            if itemDict.get(target - item) != None:
                return [itemDict[target-item], i]
            else:
                itemDict[item] = i
        return [-1, -1]


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

result = Solution().twoSum(nums, target)
print(result)

Golang 代碼

package main

import "fmt"

func twoSum(nums []int, target int) []int {
    itemMap := map[int]int{}
    for i, item := range nums {

        if originItem, exists := itemMap[target-item]; exists {
            return []int{originItem, i}
        } else {
            itemMap[item] = i
        }
    }
    return []int{}
}

func main() {
    nums := []int{2, 7, 11, 15}
    target := 9
    result := twoSum(nums, target)
    fmt.Println(result)
}
user avatar greatsql Avatar soroqer Avatar u_17467352 Avatar bytebase Avatar emanjusaka Avatar huaiyue_63f0b9e085bf0 Avatar birenxuemou Avatar guangmingleiluodebaomihua Avatar lyh_bxxw Avatar aihejiudejiqiren_bjjawt Avatar shimiandeshatanku Avatar wanhuabandeshuitong Avatar
Favorites 19 users favorite the story!
Favorites

Add a new Comments

Some HTML is okay.