欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

使用python實(shí)現(xiàn)兩數(shù)之和的畫解算法

 更新時(shí)間:2021年08月31日 12:39:37   作者:不吃西紅柿丶  
這篇文章主要介紹了使用python實(shí)現(xiàn)兩數(shù)之和的畫解算法,采用實(shí)例問題的描述來進(jìn)行問題分析,并給出用暴力求解和哈希表兩種方法解決方案,有需要的朋友可以參考下

題目描述

給定一個(gè)整數(shù)數(shù)組 nums 和一個(gè)整數(shù)目標(biāo)值 target,請你在該數(shù)組中找出 和為目標(biāo)值 target 的那 兩個(gè) 整數(shù),并返回它們的數(shù)組下標(biāo)。

你可以假設(shè)每種輸入只會(huì)對(duì)應(yīng)一個(gè)答案。但是,數(shù)組中同一個(gè)元素在答案里不能重復(fù)出現(xiàn)。

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

示例 1:

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

輸出:[0,1]

解釋:因?yàn)?nums[0] + nums[1] == 9 ,返回 [0, 1] 。

示例 2:

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

輸出:[1,2]

示例 3:

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

輸出:[0,1]

問題分析

1.暴力求解

兩層循環(huán),外層循環(huán)枚舉(或稱作選中一個(gè)標(biāo)桿),內(nèi)層循環(huán)從枚舉值之后開始遍歷,計(jì)算兩數(shù)的和是否等于target。

如果找到了兩個(gè)數(shù),那么返回這兩個(gè)數(shù)的下標(biāo)。

for(int i = 0; i < n - 1; ++i) {
    for(int j = i + 1; j < n; ++j ) {
        if nums[i] + nums[j] == target
        ...
    }
}

暴力求解的算法時(shí)間復(fù)雜度為指數(shù)級(jí),也就是O(n^2)

分析暴力求解,我們發(fā)現(xiàn)存在重復(fù)搜索的情況,也就是對(duì)數(shù)組中的部分?jǐn)?shù)據(jù)搜索了多次。

那如何只對(duì)數(shù)組中的數(shù)據(jù)搜索1次(或常數(shù)級(jí)),然后求解呢?

我們知道,尋找一個(gè)數(shù)是否存在,最快的方法是通過hash表,在O(1)的時(shí)間復(fù)雜度之內(nèi)就可以判斷是否存在某個(gè)數(shù)。

2.哈希表求解

可對(duì)數(shù)組遍歷一次,然后將數(shù)據(jù)存入hash表,然后再遍歷一次數(shù)組

查找 target - currentdata 是否存在hash表中,如果存在,那么我們就尋找到了兩個(gè)數(shù)。

題目要求我們返回?cái)?shù)組的下標(biāo),那么我們的hash表的key是數(shù)組元素的值,value是下標(biāo)。

  • 這種方法在最壞的情況下,對(duì)數(shù)組遍歷了2次,也就是算法的時(shí)間復(fù)雜度是O(2n),去掉前導(dǎo)系數(shù)是O(n),雖然是相比暴力求解,算法的時(shí)間復(fù)雜度降低了,但是還有優(yōu)化的空間。
  • 在遍歷數(shù)組并將數(shù)據(jù)放入hash表的同時(shí),我們也可以find(target - currentdata)是否存在,如果存在那么就找到了滿足條件的兩個(gè)數(shù)。

find(9-4), 存在那返回這兩個(gè)數(shù)的下標(biāo),如果不存在,那么將 4 放入hash表。

image.png


find(9-6), 存在那返回這兩個(gè)數(shù)的下標(biāo),如果不存在,那么將 6 放入hash表。

image.png

在遍歷到元素5的時(shí)候,我們find(9-5),找到了這兩個(gè)數(shù)。

image.png

動(dòng)畫演示下這個(gè)過程

2021-06-06 222452.gif

代碼實(shí)現(xiàn)

class Solution:
    def twoSum(self, nums: List[int], target: int) -> List[int]:
        hashtable = dict()
        for i, num in enumerate(nums):
            # ② map中查找是否有 target - curvalue的數(shù)據(jù)
            if target - num in hashtable:
                return [hashtable[target - num], i]
            # ① 數(shù)組中的每個(gè)數(shù)放入map中
            hashtable[nums[i]] = i
        return []

以上就是使用python實(shí)現(xiàn)兩數(shù)之和的畫解算法的詳細(xì)內(nèi)容,更多關(guān)于python實(shí)現(xiàn)兩數(shù)之和的畫解算法的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Python定時(shí)器線程池原理詳解

    Python定時(shí)器線程池原理詳解

    這篇文章主要介紹了Python定時(shí)器線程池原理詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-02-02
  • Python解決多進(jìn)程間訪問效率低的方法總結(jié)

    Python解決多進(jìn)程間訪問效率低的方法總結(jié)

    這篇文章主要為大家詳細(xì)介紹了當(dāng)Python多進(jìn)程間訪問效率低時(shí),應(yīng)該如何解決?文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下
    2022-09-09
  • Pandas Series如何轉(zhuǎn)換為DataFrame

    Pandas Series如何轉(zhuǎn)換為DataFrame

    這篇文章主要介紹了Pandas Series如何轉(zhuǎn)換為DataFrame問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • python實(shí)現(xiàn)網(wǎng)絡(luò)五子棋

    python實(shí)現(xiàn)網(wǎng)絡(luò)五子棋

    這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)網(wǎng)絡(luò)五子棋,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-04-04
  • Python實(shí)現(xiàn)的knn算法示例

    Python實(shí)現(xiàn)的knn算法示例

    這篇文章主要介紹了Python實(shí)現(xiàn)的knn算法,結(jié)合實(shí)例形式詳細(xì)分析了Python實(shí)現(xiàn)knn算法的原理與相關(guān)操作技巧,并附帶給出了statsmodels模塊與pandas模塊的下載、安裝操作方法,需要的朋友可以參考下
    2018-06-06
  • Django 1.10以上版本 url 配置注意事項(xiàng)詳解

    Django 1.10以上版本 url 配置注意事項(xiàng)詳解

    這篇文章主要介紹了Django 1.10以上版本 url 配置注意事項(xiàng)詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-08-08
  • Keras實(shí)現(xiàn)DenseNet結(jié)構(gòu)操作

    Keras實(shí)現(xiàn)DenseNet結(jié)構(gòu)操作

    這篇文章主要介紹了Keras實(shí)現(xiàn)DenseNet結(jié)構(gòu)操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-07-07
  • Python中eval函數(shù)的表達(dá)式作用示例

    Python中eval函數(shù)的表達(dá)式作用示例

    這篇文章主要介紹了Python中eval函數(shù)的表達(dá)式用法示例,文中通過示例對(duì)比來為大家進(jìn)行詳細(xì)的講解,有需要的朋友可以借鑒參下,希望有所幫助
    2021-09-09
  • 阿里云ECS服務(wù)器部署django的方法

    阿里云ECS服務(wù)器部署django的方法

    今天小編就為大家分享一篇阿里云ECS服務(wù)器部署django的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-08-08
  • python如何通過pyqt5實(shí)現(xiàn)進(jìn)度條

    python如何通過pyqt5實(shí)現(xiàn)進(jìn)度條

    這篇文章主要介紹了python如何通過pyqt5實(shí)現(xiàn)進(jìn)度條,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-01-01

最新評(píng)論