哈希表法快速求解最長連續序列 | 力扣128題詳細解析

?????? 歡迎來到我的博客。希望您能在這里找到既有價值又有趣的內容,和我一起探索、學習和成長。歡迎評論區暢所欲言、享受知識的樂趣!

  • 推薦:數據分析螺絲釘的首頁 格物致知 終身學習 期待您的關注
    在這里插入圖片描述

  • 導航

    • LeetCode解鎖1000題: 打怪升級之旅:每題都包括3-5種算法,以及詳細的代碼實現,刷題面試跳槽必備
    • 漫畫版算法詳解:通過漫畫的形式和動態GIF圖片把復雜的算法每一步進行詳細可視解讀,看一遍就掌握
    • python源碼解讀:解讀python的源代碼與調用關系,快速提升代碼質量
    • python數據分析可視化:企業實戰案例:企業級數據分析案例與可視化,提升數據分析思維和可視化能力
    • 程序員必備的數學知識與應用:全面詳細的介紹了工程師都必備的數學知識

期待與您一起探索技術、持續學習、一步步打怪升級 歡迎訂閱本專欄????

題目描述

給定一個未排序的整數數組 nums,找出數字連續的最長序列的長度。要求時間復雜度在 O(n) 內。

注意:

  • 這個序列不需要在原數組中是連續的。

示例:

輸入: [100, 4, 200, 1, 3, 2]
輸出: 4
解釋: 最長連續序列是 [1, 2, 3, 4]。它的長度是 4。

方法一:哈希表

解題步驟

  1. 使用哈希表存儲所有數字,以便快速查找數組中的任意數字是否存在。
  2. 遍歷數組 nums,對每個元素進行檢查:
    • 如果其前一個元素 (num - 1) 不在哈希表中,則這是一個新序列的起點。
  3. 從起點開始,遞增查找連續的數字,同時更新最長連續序列的長度。
  4. 返回找到的最大長度。

Python 示例

def longestConsecutive(nums):num_set = set(nums)max_length = 0for num in num_set:if num - 1 not in num_set:current_num = numcurrent_length = 1while current_num + 1 in num_set:current_num += 1current_length += 1max_length = max(max_length, current_length)return max_length# 示例使用
nums = [100, 4, 200, 1, 3, 2]
print(longestConsecutive(nums))  # 輸出: 4

算法分析

  • 時間復雜度:O(n)。盡管看起來有雙層循環,但每個數字在內層循環中只訪問一次。
  • 空間復雜度:O(n),因為需要存儲數組元素的哈希表。

詳細步驟說明

  1. 構建哈希表

    • 將所有數字插入哈希表,確保每個數字能被快速查找。
    • 例如,對于輸入 [100, 4, 200, 1, 3, 2],哈希表為 {100, 4, 200, 1, 3, 2}
  2. 查找序列起點

    • 遍歷哈希表中的每個數字,判斷是否為序列的起點。
    • 一個數字是序列起點的條件是其前一個數字不在哈希表中。
    • 例如,1 是起點,因為 0 不在哈希表中。
  3. 構建序列

    • 從序列起點開始,逐步查找下一個連續數字,并計算序列長度。
    • 例如,從 1 開始,可以找到 234,最終序列長度為 4

更多示例

  1. 輸入:[0, -1, 1, 2, 3]

    • 輸出:5
    • 解釋:最長連續序列是 [-1, 0, 1, 2, 3],長度為 5
  2. 輸入:[10, 5, 12, 3, 55, 6, 11, 8, 7, 9]

    • 輸出:6
    • 解釋:最長連續序列是 [5, 6, 7, 8, 9, 10],長度為 6

圖示與說明

考慮 nums = [100, 4, 200, 1, 3, 2]

  1. 構建哈希表

    • 哈希表:{100, 4, 200, 1, 3, 2}
  2. 查找序列起點

    初始數組: [100, 4, 200, 1, 3, 2]
    哈希表構建: {100, 4, 200, 1, 3, 2}從 '1' 開始,因為 '0' 不在集合中,序列可以從 '1' 開始向上構建:
    1 -> 2 -> 3 -> 4
    連續序列長度為 4,是此數組的最長連續序列。
    
  3. 詳細步驟說明

步驟當前數字當前序列最長序列長度
初始[100, 4, 200, 1, 3, 2]
構建哈希表{100, 4, 200, 1, 3, 2}
步驟11[1]1
步驟21 -> 2[1, 2]2
步驟31 -> 2 -> 3[1, 2, 3]3
步驟41 -> 2 -> 3 -> 4[1, 2, 3, 4]4

🌹🌹如果覺得這篇文對你有幫助的話,記得一鍵三連關注、贊👍🏻、收藏是對作者最大的鼓勵,非常感謝 ?(^_-)

????作者知識有限,如有錯誤,請各位大佬評論區批評指正,不勝感激?(^_-)
在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/13387.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/13387.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/13387.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Oracle 數據庫 19c 選件和管理包 英文技術文檔

都是英文的,點擊鏈接可單獨下載。點這里批量下載。 Database Options: 數據庫選件或管理包數據表技術白皮書MultitenantData Sheet(12c)White PaperReal Application ClustersData Sheet(12c)White PaperActive Data GuardData Sheet(沒找到)White Pap…

關于電源3(整流濾波電路)

整流濾波電路 框圖 一共有四種整流電路 以下是自己參考別人的文章https://blog.csdn.net/zhuguanlin121/article/details/130653498?ops_request_misc%257B%2522request%255Fid%2522%253A%2522171582622316800215096518%2522%252C%2522scm%2522%253A%252220140713.130102334…

jenkins配置不同版本nodeJS,保姆級叫你配置

問題描述:公司jenkins被改了nodejs版本適配其他項目導致以前的項目構建失敗,原因就是nodejs版本太高或太低導致,這里教大家不去更改服務器默認版本,當需要特殊版本直接在jenkins里配置即可。 過程 1、安裝nodeJS插件 1.1點擊管…

Linux中的nproc命令

2024年5月15日,周三上午 nproc 是一個在類 Unix 系統中使用的命令行實用程序,用于返回系統上可用的處理器核心數量。這個數字通常比物理 CPU 核心的數量要少,因為它可能排除了超線程核心或熱插拔核心。nproc 命令讀取 /proc/cpuinfo 文件來獲…

怎么把照片變小做頭像?多種方法教你圖片改尺寸

現在在社交媒體平臺或者是社交軟件上,我們經常會去更改頭像來展示自己,但是有時候我們拍攝的照片太大無法直接用作頭像,這時候就需要去修改圖片尺寸,將圖片改大小到合適的數值才能使用,那么如何快速的將圖片改大小呢&a…

Ansys Mechanical|中遠程點的Behavior該如何設置?

Remote point是ANSYS mechanical中的一種常見節點自由度耦合建模形式,在轉動裝配體中的連接轉動副、或者在施加遠端約束及遠端載荷的時候,我們經常用到遠端單元來耦合一個面或者一條線。例如銷軸似的滾動摩擦連接,如果我們希望將兩個物體通過…

TCP實現文件傳輸以及下載

目錄 1.上傳文件思路 2.下載文件思路 3.上傳文件代碼 4.下載文件代碼 5.運行格式 1.上傳文件思路 上傳文件就相當于客戶端發送文件 步驟: 創建套接字連接服務器獲取文件大小循環少量多次發送關閉文件和套接字 2.下載文件思路 下載文件就相當于服務器端接收…

layui+java前端傳json后端接收

項目場景: layui前端使用復選框選擇Table的數據傳到java后端進行業務操作 問題描述 報錯類型錯誤JSON轉換接收失敗的類型錯誤 解決方案: 分為前后端兩種情況 先說前端的: 前端需要是集合轉json下面是代碼案例 主界面的table選擇之后通過緩存傳到子界…

JavaScript 實現敏感信息脫敏

JavaScript 實現敏感信息脫敏 銀行卡號脫敏 要在 JavaScript 中對銀行卡信息進行脫敏,可以使用字符串處理方法來替換敏感信息為特定的字符。以下是一個簡單的示例代碼,將銀行卡號的中間數字用 “*” 替換: function desensitizeCardNumber…

小白git

克隆 :git clone 鏈接地址 如果沒有.git文件的話:git init 切換分支:cd 目錄 拉代碼:git pull 查看你自己改了那些文件:git status 添加道本地暫存區:git add * 提交到遠端:git commit …

吳恩達深度學習筆記:優化算法 (Optimization algorithms)2.9-2.10

目錄 第二門課: 改善深層神經網絡:超參數調試、正 則 化 以 及 優 化 (Improving Deep Neural Networks:Hyperparameter tuning, Regularization and Optimization)第二周:優化算法 (Optimization algorithms)2.9 學習率衰減(Learning rate decay) 第二門…

HP5V80、HP5V105、HP3V28電比例驅動柱塞泵放大器

HP5V80、HP5V105、HP3V28、HP3V45、HP3V60、HP3V80、HP3V125、HP3V140帶電比例控制泵放大器,變排量泵的排量可通過由BEUEC比例放大器輸出到比例電磁閥電流變化而進行調整,控制電流范圍為300mA至800mA(24VDC)或600mA至1600mA(12VDC)。主要適合應用于工程機…

【聯通官網及APP注冊/登錄安全分析報告】

前言 由于網站注冊入口容易被黑客攻擊,存在如下安全問題: 暴力破解密碼,造成用戶信息泄露短信盜刷的安全問題,影響業務及導致用戶投訴帶來經濟損失,尤其是后付費客戶,風險巨大,造成虧損無底洞 …

「AI模型瘦身術」——知識蒸餾技術綜述

使用KD原因 遇到問題:從產業發展的角度來看工業化將逐漸過渡到智能化,邊緣計算逐漸興起預示著 AI 將逐漸與小型化智能化的設備深度融合,這也要求模型更加的便捷、高效、輕量以適應這些設備的部署。 解決方案:知識蒸餾技術 知識…

Logic Pro X for Mac v11.0.0激活版:專業音頻制作軟件

對于音樂創作者來說,一個穩定、高效的工作流程至關重要。Logic Pro X for Mac提供了一系列工作流程優化功能,讓你能夠更快捷、高效地完成音樂創作。從添加音軌、錄制音頻,到混音和編曲,每一個步驟都如絲般順滑。同時,L…

Maven 依賴排查

先從項目去看顯而易見,假如我們有一個項目,父工程中包含一些子工程,如下: 我們想看一下samples-account中的依賴關系,那么我們可以打開 samples-account的pom文件,查看其maven依賴關系圖。 我們可以看到此項…

Java測試框架:分享常用的Java測試框架,如JUnit, TestNG等,包括單元測試,集成測試,性能測試等

單元測試框架 JUnit JUnit簡介 JUnit是一個開源的Java測試框架,用于編寫和執行可重復的測試。它是Java開發人員的一個重要工具,用于進行單元測試、回歸測試和模塊化測試。JUnit提供了一種形式化的方式來編寫測試用例,并通過這些測試用例核實代碼的正確性。具有可預測的測試…

ARM 交叉編譯搭建SSH

一、源碼下載 zlib:zlib-1.3.1.tar.xz openssl:openssl-0.9.8d.tar.gz openssh:openssh-4.6p1.tar.gz 二、交叉編譯 1、zlib 編譯參考這里 2、openssl tar -xf openssl-0.9.8d.tar.gz ./Configure --prefix/opt/ssh/openssl os/compile…

android設計模式-builder模式

builder模式可以看成是鏈式調用,如,是builder不是那個bunder new AlertDialog.Builder(this) .setTitle("對話框") .setMessage("測試") .setIcon(R.mipmap.ic_launcher) …

2024年抖店保證金交多少?保證金常見問題解答,一文解決你所有疑惑

大家好,我是電商花花 新手如果想要開抖音小店,有一個大坑是必須要避開的。 就是我們店鋪開通之后,我們一定要交保證金,如果不交,那就是0元開店。 很多新手聽別人說做抖音小店可以0元開店,不用繳納保證金就…