力扣100題之128. 最長連續序列

方法1 使用了hash

方法思路
使用哈希集合:首先將數組中的所有數字存入一個哈希集合中,這樣可以在 O(1) 時間內檢查某個數字是否存在。
尋找連續序列:遍歷數組中的每一個數字,對于每一個數字,
檢查它是否是某個連續序列的起點(即檢查 num - 1 是否存在于集合中)。
如果不是起點,則跳過;
如果是起點,則開始向后檢查連續的數字(num + 1, num + 2 等),并記錄序列的長度。
更新最大長度:在遍歷過程中,不斷更新記錄的最大序列長度。
這種方法確保每個數字最多被訪問兩次(一次在遍歷數組時,一次在檢查連續序列時),因此時間復雜度為 O(n)。

    public int longestConsecutive(int[] nums) {/*  方法思路使用哈希集合:首先將數組中的所有數字存入一個哈希集合中,這樣可以在 O(1) 時間內檢查某個數字是否存在。尋找連續序列:遍歷數組中的每一個數字,對于每一個數字,檢查它是否是某個連續序列的起點(即檢查 num - 1 是否存在于集合中)。如果不是起點,則跳過;如果是起點,則開始向后檢查連續的數字(num + 1, num + 2 等),并記錄序列的長度。更新最大長度:在遍歷過程中,不斷更新記錄的最大序列長度。這種方法確保每個數字最多被訪問兩次(一次在遍歷數組時,一次在檢查連續序列時),因此時間復雜度為 O(n)。*///        1.哈希集合初始化:將數組中的所有數字存入哈希集合 numSet 中,以便快速查找。Set<Integer> hashSet = new HashSet<>;for(int num:nums){hashSet.add(num);}int longesetStreak = 0;
//        2.遍歷集合:對于集合中的每一個數字,檢查它是否是某個連續序列的起點(即 num - 1 不在集合中)。for(int num:hashSet){//        3.擴展序列:如果是起點,則向后擴展序列,計算當前連續序列的長度 currentStreak。if(!hashSet.contains(num-1)){int currentNum =num;int currentStreak=1;while(hashSet.contains(currentNum+1)){currentNum++;currentStreak++;}//        4.更新最大值:比較并更新最長序列長度 longestStreak。longesetStreak=Math.max(longesetStreak,currentStreak);}}//        5.返回結果:最終返回最長序列的長度。return longesetStreak;}

方法二 排序法(時間復雜度大)

public int longestConsecutive(int[] nums) {// 處理邊界情況:空數組直接返回0if (nums.length == 0) return 0;// 對數組排序(升序),便于后續連續元素判斷Arrays.sort(nums);int maxLength = 0;  // 記錄最長連續子序列長度int currentLength = 1;  // 當前連續子序列長度,初始為1(至少有一個元素)// 從第二個元素開始遍歷(索引1到末尾)for (int i = 1; i < nums.length; i++) {int currentNum = nums[i];int prevNum = nums[i - 1];if (currentNum == prevNum) {// 跳過重復元素(排序后相鄰重復,不影響連續性判斷)continue;} else if (currentNum == prevNum + 1) {// 當前元素與前一個元素連續,長度加1currentLength++;} else {// 連續序列中斷,更新最長長度,并重置當前長度maxLength = Math.max(maxLength, currentLength);currentLength = 1;}}// 處理最后一次連續序列(遍歷結束后可能還有未比較的長度)return Math.max(maxLength, currentLength);
}

在這里插入圖片描述

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

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

相關文章

Java爬蟲技術詳解:原理、實現與優勢

一、什么是網絡爬蟲&#xff1f; 網絡爬蟲&#xff08;Web Crawler&#xff09;&#xff0c;又稱網絡蜘蛛或網絡機器人&#xff0c;是一種自動化程序&#xff0c;能夠按照一定的規則自動瀏覽和抓取互聯網上的信息。爬蟲技術是大數據時代獲取網絡數據的重要手段&#xff0c;廣泛…

神經網絡與深度學習 網絡優化與正則化

1.網絡優化存在的難點 &#xff08;1&#xff09;結構差異大&#xff1a;沒有通用的優化算法&#xff1b;超參數多 &#xff08;2&#xff09;非凸優化問題&#xff1a;參數初始化&#xff0c;逃離局部最優 &#xff08;3&#xff09;梯度消失&#xff08;爆炸&#xff09; …

【匯編逆向系列】二、函數調用包含單個參數之整型-ECX寄存器,LEA指令

目錄 一. 匯編源碼 二. 匯編分析 1. ECX寄存器 2. 棧位置計算? 3. 特殊指令深度解析 三、 匯編轉化 一. 匯編源碼 single_int_param:0000000000000040: 89 4C 24 08 mov dword ptr [rsp8],ecx0000000000000044: 57 push rdi0000…

Linux進程替換以及exec六大函數運用

文章目錄 1.進程替換2.替換過程3.替換函數exec3.1命名解釋 4.細說6個exe函數execl函數execvexeclp、execvpexecle、execve 1.進程替換 fork&#xff08;&#xff09;函數在創建子進程后&#xff0c;子進程如果想要執行一個新的程序&#xff0c;就可以使用進程的程序替換來完成…

Selenium操作指南(全)

&#x1f345; 點擊文末小卡片&#xff0c;免費獲取軟件測試全套資料&#xff0c;資料在手&#xff0c;漲薪更快 大家好&#xff0c;今天帶大家一起系統的學習下模擬瀏覽器運行庫Selenium&#xff0c;它是一個用于Web自動化測試及爬蟲應用的重要工具。 Selenium測試直接運行在…

結構性設計模式之Facade(外觀)設計模式

結構性設計模式之Facade&#xff08;外觀&#xff09;設計模式 前言&#xff1a; 外觀模式&#xff1a;用自己的話理解就是用戶看到是一個總體頁面&#xff0c;比如xx報名系統頁面。里面有歷年真題模塊、報名模塊、教程模塊、首頁模塊… 做了一個各個模塊的合并&#xff0c;對…

RabbitMQ實用技巧

RabbitMQ是一個流行的開源消息中間件&#xff0c;廣泛用于實現消息傳遞、任務分發和負載均衡。通過合理使用RabbitMQ的功能&#xff0c;可以顯著提升系統的性能、可靠性和可維護性。本文將介紹一些RabbitMQ的實用技巧&#xff0c;包括基礎配置、高級功能及常見問題的解決方案。…

Linux(10)——第二個小程序(自制shell)

目錄 ?編輯 一、引言與動機 &#x1f4dd;背景 &#x1f4dd;主要內容概括 二、全局數據 三、環境變量的初始化 ? 代碼實現 四、構造動態提示符 ? 打印提示符函數 ? 提示符生成函數 ?獲取用戶名函數 ?獲取主機名函數 ?獲取當前目錄名函數 五、命令的讀取與…

環境變量深度解析:從配置到內核的全鏈路指南

文章目錄 一、基礎概念與核心作用二、常見環境變量三、操作指南&#xff1a;從查看、修改到調試3.1 快速查詢3.2 PATH 原理與配置實踐3.2.1 命令執行機制3.2.2 路徑管理策略 四、編程接口與內存模型4.1 環境變量的內存結構4.2 C 語言訪問方式4.2.1 直接訪問&#xff08;main 參…

結合Jenkins、Docker和Kubernetes等主流工具,部署Spring Boot自動化實戰指南

基于最佳實踐的Spring Boot自動化部署實戰指南,結合Jenkins、Docker和Kubernetes等主流工具,提供從環境搭建到生產部署的完整流程: 一、環境準備與工具選型?? ??1.基礎設施?? ??Jenkins服務器??:安裝Jenkins LTS版本,配置JDK(推薦JDK 11+)及Maven/Gradle插…

動態規劃---股票問題

1.在推狀態轉移方程的途中&#xff0c;箭頭的起始點表示前一天的狀態&#xff0c;箭頭的終點是當天的狀態 2.當動態規劃中涉及到多狀態&#xff0c;且狀態之間可以相互轉換&#xff0c;要畫圖去分析 1.買賣股票的最佳時機含冷凍期 題目鏈接&#xff1a;309. 買賣股票的最佳時機…

ObjectMapper 在 Spring 統一響應處理中的作用詳解

ObjectMapper 是 Jackson 庫的核心類&#xff0c;專門用于處理 JSON 數據的序列化&#xff08;Java 對象 → JSON&#xff09;和反序列化&#xff08;JSON → Java 對象&#xff09;。在你提供的代碼中&#xff0c;它解決了字符串響應特殊處理的關鍵問題。 一、為什么需要 Obj…

總結這幾個月來我和AI一起開發并上線第一個應用的使用經驗

副標題&#xff1a; 當“手殘”前端遇到AI隊友&#xff0c;我的音樂小站譜貝誕生記 大家好&#xff0c;我最近干了件“不務正業”的事——**獨立開發并上線了一個完整的網站 作為一個前端“手殘黨”&#xff08;還在努力學習中&#x1f605;&#xff09;&#xff0c;這次能成功…

【大模型:知識圖譜】--5.neo4j數據庫管理(cypher語法2)

目錄 1.節點語法 1.1.CREATE--創建節點 1.2.MATCH--查詢節點 1.3.RETURN--返回節點 1.4.WHERE--過濾節點 2.關系語法 2.1.創建關系 2.2.查詢關系 3.刪除語法 3.1.DELETE 刪除 3.2.REMOVE 刪除 4.功能補充 4.1.SET &#xff08;添加屬性&#xff09; 4.2.NULL 值 …

結構體指針與非指針 問題及解決

問題描述 第一段位于LCD.h和LCD.c中&#xff0c; 定義個一個結構體lcd_params&#xff0c;并直接給與指針名*p_lcd_params; 我發現我在調用這個結構體時&#xff0c;即在LCD.c中&#xff0c;使用指針類型定義的 static p_lcd_params p_array_lcd[LCD_NUM]; static p_lcd_par…

【設計模式-3.7】結構型——組合模式

說明&#xff1a;本文介紹結構型設計模式之一的組合模式 定義 組合模式&#xff08;Composite Pattern&#xff09;又叫作整體-部分&#xff08;Part-Whole&#xff09;模式&#xff0c;它的宗旨是通過將單個對象&#xff08;葉子節點&#xff09;和組合對象&#xff08;樹枝…

【TMS570LC4357】之相關驅動開發學習記錄2

系列文章目錄 【TMS570LC4357】之工程創建 【TMS570LC4357】之工程配置修改 【TMS570LC4357】之HALCOGEN使用 【TMS570LC4357】之相關問題及解決 【TMS570LC4357】之相關驅動開發學習記錄1 ——————————————————— 前言 記錄筆者在第一次使用TMS570過程中對…

3D Gaussian splatting 05: 代碼閱讀-訓練整體流程

目錄 3D Gaussian splatting 01: 環境搭建3D Gaussian splatting 02: 快速評估3D Gaussian splatting 03: 用戶數據訓練和結果查看3D Gaussian splatting 04: 代碼閱讀-提取相機位姿和稀疏點云3D Gaussian splatting 05: 代碼閱讀-訓練整體流程3D Gaussian splatting 06: 代碼…

【黑馬程序員uniapp】項目配置、請求函數封裝

黑馬程序員前端項目uniapp小兔鮮兒微信小程序項目視頻教程&#xff0c;基于Vue3TsPiniauni-app的最新組合技術棧開發的電商業務全流程_嗶哩嗶哩_bilibili 參考 有代碼&#xff0c;還有app、h5頁面、小程序的演示 小兔鮮兒-vue3ts-uniapp-一套代碼多端部署: 小兔鮮兒-vue3ts-un…

前端使用 preview 插件預覽docx文件

目錄 前言一 引入插件二 JS 處理 前言 前端使用 preview 插件預覽docx文件 一 引入插件 建議下載至本地&#xff0c;靜態引入&#xff0c;核心的文件已打包&#xff08;前端使用 preview 插件預覽docx文件&#xff09;&#xff0c;在文章目錄處下載至本地&#xff0c;復制在項…