當前位置 博文首頁 > 信息技術智庫:《畫解算法》1.兩數之和【python實現】

    信息技術智庫:《畫解算法》1.兩數之和【python實現】

    作者:[db:作者] 時間:2021-09-13 19:00

    🍅 作者主頁:不吃西紅柿

    🍅 簡介:CSDN博客專家🏆、信息技術智庫公號作者?。簡歷模板、職場PPT模板、技術難題交流、面試套路盡管【關注】私聊我。

    🍅 歡迎點贊 👍 收藏 ?留言 📝 如有錯誤敬請指正!

    ??

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

    你可以假設每種輸入只會對應一個答案。但是,數組中同一個元素在答案里不能重復出現。

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

    示例 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]

    ?

    1.暴力求解

    兩層循環,外層循環枚舉(或稱作選中一個標桿),內層循環從枚舉值之后開始遍歷,計算兩數的和是否等于target。如果找到了兩個數,那么返回這兩個數的下標。

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


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

    分析暴力求解,我們發現存在重復搜索的情況,也就是對數組中的部分數據搜索了多次。那如何只對數組中的數據搜索1次(或常數級),然后求解呢?

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

    2.哈希表求解
    可對數組遍歷一次,然后將數據存入hash表,然后再遍歷一次數組,查找 target - currentdata 是否存在hash表中,如果存在,那么我們就尋找到了兩個數。 題目要求我們返回數組的下標,那么我們的hash表的key是數組元素的值,value是下標。

    這種方法在最壞的情況下,對數組遍歷了2次,也就是算法的時間復雜度是O(2n),去掉前導系數是O(n),雖然是相比暴力求解,算法的時間復雜度降低了,但是還有優化的空間。

    在遍歷數組并將數據放入hash表的同時,我們也可以find(target - currentdata)是否存在,如果存在那么就找到了滿足條件的兩個數。

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

    image.png

    ?
    find(9-6), 存在那返回這兩個數的下標,如果不存在,那么將 6 放入hash表。

    image.png

    ?

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

    image.png

    ?


    動畫演示下這個過程

    2021-06-06 222452.gif

    ?

    代碼實現

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

    熱門專欄推薦:

    🥇 大數據集錦專欄:大數據-硬核學習資料 & 面試真題集錦?
    🥈?數據倉庫專欄:數倉發展史、建設方法論、實戰經驗、面試真題?
    🥉?Python專欄:Python相關黑科技:爬蟲、算法、小工具?

    (優質好文持續更新中……)?

    cs
zxbackspace的博客:Visual Studio Code 編輯后同步至 GitHub zxbackspace的博客:Python實現定時在微信群發送消息 zxbackspace的博客:Linux-UOS系統使用命令安裝Java hallobike的博客:從單幅圖像學習生成模型,可應用于多種圖像處 hallobike的博客:win10+tomcat 8的安裝和環境配置 hallobike的博客:Win10系統 Visual Studio 2015+openCV3.4.1安 hallobike的博客:win10系統下調通SeetaFace1.0人臉識別引擎 hallobike的博客:win10系統下Qt和VS環境配置問題 hallobike的博客:SeetaFace6人臉識別算法 hallobike的博客:人臉識別的介紹 hallobike的博客:win10系統下基于SeetaFace2.0的人臉識別系統的 hallobike的博客:神經網絡和深度學習的介紹 hallobike的博客:第三屆全國高校綠色計算系列大賽-任務挑戰組預 hallobike的博客:Python中PyTorch環境配置 hallobike的博客:數據結構課設(C++版) hallobike的博客:Win10下Tesseract-OCR安裝 hallobike的博客:使用OpenCV進行圖像全景拼接 hallobike的博客:讀COMPUTING MACHINERY AND INTELLIGENCE有感 hallobike的博客:利用OpenCV實現圖像修復 hallobike的博客:基于自適應顯著性的圖像分割 hallobike的博客:TensorFlow2.0簡介和線性回歸 hallobike的博客:邏輯回歸與交叉熵 hallobike的博客:梯度下降和多層感知器 hallobike的博客:多分類情況使用softmax函數激活 hallobike的博客:優化函數、學習速率、反向傳播 hallobike的博客:Dropout與過擬合抑制、函數式API hallobike的博客:使用遺傳算法計算函數最大值(C++代碼) hallobike的博客:python中使用matplotlib.pyplot畫函數圖像 hallobike的博客:網絡優化、超參數選擇、過擬合處理 hallobike的博客:使用tf.data數據轉換來訓練MNIST數據集 hallobike的博客:卷積深網絡CNN簡介 hallobike的博客:TensorFlow2.0的Eager模式 hallobike的博客:TensorFlow2.0批標準化 hallobike的博客:深度學習中常見的圖像處理任務 hallobike的博客:TensorFlow2.0中圖運算模式和GPU調用規則 hallobike的博客:圖像語義分割 hallobike的博客:語義分割網絡――FCN hallobike的博客:中藥槲皮素-AKT1與木犀草素IL6/VEGFA直接結合 hallobike的博客:Meat quality evaluation based on computer v hallobike的博客:京東開源FaceX-Zoo,一站式人臉識別研究平臺 hallobike的博客:目標檢測與分類API(TensorFlow官方) hallobike的博客:深度學習圖像處理相關文獻 hallobike的博客:圖像分類中的深度學習網絡匯總 hallobike的博客:一文看懂網絡中間層特征矩陣和卷積層參數 hallobike的博客:python移動文件到新的文件夾并重命名 hallobike的博客:解決OpenCV讀取視頻結束后報錯的問題 貓耳山在天邊:《Linux命令行與shell腳本編程大全》(第三版)讀 英雄哪里出來:??13萬字《C語言動漫對話教程(入門篇)》??(建議收 lyndon:CPU 上下文切換 lyndon:printf()、printk()、消息級別、日志級別 .net平臺的rabbitmq使用封裝demo詳解 C++類的特種函數生成機制詳解 Python調用百度AI實現圖片上表格識別功能 node自定義安裝更改npm全局模塊默認安裝路徑的步驟 帶你用C語言實現strtok和字符串分割函數 靜態網頁和靜態網頁性能比較 網頁標題優化原則和描述優化原則 php 怎么設置cookie記住密碼 php設置時區無效怎么辦 php __autoload 失效怎么辦 有關PHP調試的小技巧,看看吧! 從0開始:教你微信小店怎么開! 成本5元竟然賣50元 微信朋友圈賣面膜真黑啊 HashMap原理及put方法與get方法的調用過程 基于IDEA 的遠程調試 Weblogic的操作過程 UTC時間、GMT時間、本地時間、Unix時間戳的具體使用 如何利用SwiftUI實現可縮放的圖片預覽器 網站怎么利用內容更新雙重境界快速提高網站權重? php顯示繁體亂碼怎么辦 php不能開啟php_curl怎么辦
A级免费视频