最長連續序列(每天刷力扣hot100系列)

目錄

題目介紹:

哈希表法:

復雜度分析:

思路分析:

unordered_set?和?unordered_map的比較:

1. 核心區別

2. 使用場景

3. 在本題中的選擇

4. 性能對比

5. 成員函數差異

unordered_table.begin()函數是返回的鍵還是值,unordered_set.begin()函數返回的又是什么呢?

1.?unordered_map?的?begin()

2.?unordered_set?的?begin()

關鍵區別


題目介紹

哈希表法:

#include <unordered_set>
#include <algorithm> // for max()class Solution {
public:int longestConsecutive(vector<int>& nums) {if (nums.empty()) return 0; // 處理空數組unordered_set<int> numSet(nums.begin(), nums.end()); // 存儲所有數字int maxLen = 0;for (int num : numSet) {// 只處理序列起點(num-1不在集合中)if (numSet.find(num - 1) == numSet.end()) {int currentNum = num;int currentLen = 1;// 擴展連續序列while (numSet.find(currentNum + 1) != numSet.end()) {currentNum++;currentLen++;}maxLen = std::max(maxLen, currentLen); // 更新最大長度}}return maxLen;}
};

復雜度分析:

時間復雜度:O(n),其中 n 為數組的長度。具體分析已在上面正文中給出。

空間復雜度:O(n)。哈希表存儲數組中所有的數需要 O(n) 的空間。

思路分析:

這題的思路就是先用哈希表unordered_set裝初始nums數組,不需要索引所以用unordered_set而不是unordered_table。

首先遍歷哈希表

1.進入條件是必須所在num-1的位置不是連續

2.這時候currentnum和currentlen初始化,currentnum指向num這個數,currentlen為1

3.然后while循環用來計算出在這之后有多少連續的整數

4.如果下一個數字不再連續了,則記錄更新maxlen,接著下一輪的循環

5.如果num-1都是連續的,則直接下一輪,直到num-1斷了重新初始化(即第2步)

最后返回manlen值。

unordered_set?和?unordered_map的比較:

unordered_set?和?unordered_map是 C++ STL 中的兩種哈希容器

1. 核心區別

特性unordered_setunordered_map
存儲內容僅存儲鍵(key)存儲鍵值對(key-value pairs)
用途快速判斷元素是否存在(去重、集合操作)通過鍵快速查找/訪問關聯的值(字典)
元素訪問直接通過鍵訪問通過鍵訪問對應的值(map[key]
內存占用更低(僅存儲鍵)更高(需存儲鍵和值)
是否允許重復鍵不允許(自動去重)不允許重復鍵(但值可重復)

2. 使用場景

  • unordered_set

    • 檢測元素是否存在(如“是否包含數字 5”)。

    • 去重(如統計唯一元素個數)。

    • 集合運算(并集、交集等)。

    示例:

    unordered_set<int> s = {1, 2, 3};
    if (s.find(2) != s.end()) { /* 2存在 */ }
  • unordered_map

    • 建立鍵到值的映射(如“學生ID到成績”)。

    • 需要記錄額外信息(如數字的出現次數)。

    示例:

    unordered_map<int, string> m = {{1, "Alice"}, {2, "Bob"}};
    cout << m[1]; // 輸出 "Alice"

3. 在本題中的選擇

  • 為什么用?unordered_set
    您只需要判斷數字是否存在,無需存儲額外信息(如索引)。unordered_set?更節省內存且語義更直接。

    錯誤用法(原代碼):

    unordered_map<int, int> hashtable; // 存儲了無用的索引
    hashtable[nums[i]] = i; // 值(i)未被使用

    正確用法:

    unordered_set<int> numSet(nums.begin(), nums.end());
    if (numSet.find(5) != numSet.end()) { /* 5存在 */ }

4. 性能對比

  • 插入/查找時間復雜度:兩者均為平均?O(1)(最壞?O(n),哈希沖突時)。

  • 空間效率unordered_set?更優(無需存儲值)。


5. 成員函數差異

操作unordered_setunordered_map
插入元素insert(key)insert({key, value})
訪問元素只能通過迭代器遍歷map[key]?或?map.at(key)
刪除元素erase(key)erase(key)

unordered_table.begin()函數是返回的鍵還是值,unordered_set.begin()函數返回的又是什么呢?

在 C++ 的?unordered_map?和?unordered_set?中,begin()?函數返回的是?迭代器(iterator),但它們的解引用行為不同,具體取決于容器類型:


1.?unordered_map?的?begin()

  • 返回內容:返回指向第一個鍵值對(std::pair<const Key, Value>)的迭代器。

  • 訪問鍵和值

    • :用?it->first?或?(*it).first

    • :用?it->second?或?(*it).second

  • 示例

    unordered_map<int, string> m = {{1, "Alice"}, {2, "Bob"}};
    auto it = m.begin();
    cout << it->first;  // 輸出鍵:1
    cout << it->second; // 輸出值:"Alice"

2.?unordered_set?的?begin()

  • 返回內容:返回指向第一個元素(鍵本身)的迭代器。

  • 訪問元素:直接解引用迭代器(*it)。

  • 示例

    unordered_set<int> s = {1, 2, 3};
    auto it = s.begin();
    cout << *it; // 輸出元素:1(鍵本身)

關鍵區別

容器begin()?返回的迭代器解引用結果訪問方式
unordered_mapstd::pair<const Key, Value>it->first(鍵)
it->second(值)
unordered_set直接是鍵(Key*it

求三連~~~

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

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

相關文章

國標渠道研究:專業為渠道策略提供數據支持(渠道調研)

北京國標市場調查有限公司是一家專業的市場調查公司&#xff0c;&#xff08;線上問卷調查&#xff09;&#xff08;第三方市場咨詢&#xff09;&#xff08;消費者調查研究&#xff09;專注于為企業提供全方位的渠道研究服務。服務范圍包括渠道策略研究、渠道銷售數據分析和渠…

深入理解 C 語言中的拷貝函數

目錄1. C 語言中的主要拷貝函數2. strcpy&#xff1a;字符串拷貝函數簽名示例局限性3. strncpy&#xff1a;指定長度的字符串拷貝函數簽名示例局限性4. memcpy&#xff1a;通用內存拷貝函數簽名示例優勢局限性5. memmove&#xff1a;支持重疊內存拷貝函數簽名示例優勢局限性6. …

主數據變更流程

主數據&#xff08;如客戶、供應商、產品等&#xff09;的變更流程&#xff08;新增、更新、停用等&#xff09;是主數據管理&#xff08;MDM&#xff09;的核心環節&#xff0c;其設計需兼顧數據質量&#xff08;準確性、一致性&#xff09;、業務合規&#xff08;審批權限、審…

VUE2 學習筆記 合集

???????VUE2 學習筆記1 VUE特點、開發者工具、入門Demo-CSDN博客 VUE2 學習筆記2 數據綁定、數據代理、MVVM_vue2的數據綁定-CSDN博客 VUE2 學習筆記3 v-on、事件修飾符、鍵盤事件_vue2組件 點擊事件-CSDN博客 VU2 學習筆記4 計算屬性、監視屬性-CSDN博客 VUE2 學習…

【motion】HumanML3D 的安裝1:環境搭建

https://github.com/EricGuo5513/HumanML3D/issues/10 (base) root@k8s-master-pfsrv:/home/zhangbin/perfwork/01_ai/15_HumanML3D# conda env create -f environment.yaml Retrieving notices: ...working... done Channels:- defaults Platform: linux-64 Collecting

Pig Cloud遇到websocket不能實現同一個用戶不同瀏覽器接受到廣播的消息解決方案

自定義SecuritySessionKeyGenerator類,為每個客戶端連接建立唯一的keypackage com.pig4cloud.plugin.websocket.custom;import com.pig4cloud.plugin.websocket.holder.SessionKeyGenerator; import org.springframework.web.socket.WebSocketSession;import java.util.UUID; p…

藍訊hifi添加自定義算法

總結 自己定義算法要添加在hifi工程里 hifi工程在wiki上可以下載,名字叫做project 在main.c里添加了自己的算法,算法的執行涉及到通道與effect_id 編譯hifi項目需要安裝 XtensaTool 與hifi4 configuration file 編譯成功后移植bin文件 通過hifi4_effect_audio_process調用hifi…

【軟考中級網絡工程師】知識點之 STP 協議,網絡的 “交通協管員”

目錄一、STP 協議初相識二、STP 協議登場&#xff0c;網絡環路難題迎刃而解2.1 網絡環路困境2.2 STP 協議閃亮登場三、STP 協議核心探秘&#xff1a;生成樹算法3.1 選舉根網橋3.2 確定根端口3.3 選定指定端口四、STP 協議端口狀態解析4.1 阻塞狀態4.2 監聽狀態4.3 學習狀態4.4 …

分布式網關技術 + BGP EVPN,解鎖真正的無縫漫游

無線漫游的核心挑戰與標準化協議支持在構建高性能無線網絡時&#xff0c;實現用戶終端&#xff08;STA&#xff09;在不同接入點&#xff08;AP&#xff09;之間平滑、快速的漫游是核心目標之一。我們的無線AP產品原生支持業界標準的802.11k/v/r協議&#xff08;常稱為“快速漫…

廣東省省考備考(第六十七天8.5)——資料分析、數量(強化訓練)

資料分析 錯題解析解析今日題目正確率&#xff1a;87% 數量&#xff1a;數學運算 錯題解析解析解析解析標記題解析解析今日題目正確率&#xff1a;73%

FLAN-T5:大規模指令微調的統一語言模型框架

本文由「大千AI助手」原創發布&#xff0c;專注用真話講AI&#xff0c;回歸技術本質。拒絕神話或妖魔化。搜索「大千AI助手」關注我&#xff0c;一起撕掉過度包裝&#xff0c;學習真實的AI技術&#xff01; 一、核心定義與原始論文 FLAN-T5是Google于2022年提出的指令微調&…

jenkins插件Active Choices的使用通過參數動態控制多選參數的選項

title: jenkins插件Active Choices的使用通過參數動態控制多選參數的選項 tags: - jenkins categories: - 學習語錄Jenkins Active Choices 插件&#xff1a;通過參數動態控制多選參數選項一、插件介紹Active Choices 插件&#xff08;以前稱為 Uno Choice 插件&#xff09;是…

Matplotlib(六)- 坐標軸定制

文章目錄一、坐標軸概述1. 坐標軸介紹2. 坐標軸相關屬性二、坐標軸1. axes() 方法介紹2. 示例&#xff1a;添加多個繪圖區域三、坐標軸的刻度1. 坐標軸的刻度介紹2. 刻度定位器和格式器2.1 刻度定位器2.2 刻度格式器2.3 示例&#xff1a;刻度定位和格式3. 刻度樣式3.1 tick_par…

【物聯網】基于樹莓派的物聯網開發【22】——樹莓派獲取傳感器數據實時存儲實戰

場景介紹 今天程序貓帶領大家如何實時獲取樹莓派傳感器溫濕度數據&#xff0c;并自動存儲到數據庫中。確保數據的持續性。 實現過程 硬件連接 樹莓派4b連接GPIO引腳與DHT11傳感器; 硬件只涉及樹莓派、DHT11傳感器。 DHT11的信號引腳連接樹莓派的GPIO17&#xff0c; DHT11的Vdd&…

Linux DNS緩存與Nginx DNS緩存運維文檔

一、Linux DNS緩存機制與配置 1. Linux DNS緩存原理 Linux系統中的DNS緩存主要通過以下幾種方式實現&#xff1a; ?** nscd(Name Service Caching Daemon)**?&#xff1a;系統級緩存服務&#xff0c;可緩存DNS解析、主機名解析等信息?dnsmasq?&#xff1a;輕量級DNS轉發器和…

Java開發時出現的問題---并發與資源管理深層問題

Java 并發模型基于 JVM 內存模型&#xff08;JMM&#xff09;&#xff0c;資源管理涉及 IO、線程、鎖等關鍵組件。若對并發語義、資源生命周期理解不透徹&#xff0c;易引發死鎖、內存泄漏、數據錯亂等嚴重問題。1. 并發三大特性&#xff08;可見性、原子性、有序性&#xff09…

從「同步」到「異步」:用 aiohttp 把 Python 網絡 I/O 榨到極致

目錄 一、寫在前面&#xff1a;為什么 IO 是瓶頸 二、同步模型&#xff1a;requests 的憂傷 三、線程池&#xff1a;用并發掩蓋阻塞 四、aiohttp&#xff1a;讓「等待」非阻塞 4.1 安裝與版本約定 4.2 異步客戶端&#xff1a;asyncio aiohttp 4.3 錯誤處理與超時 4.4 …

MySQL 在麒麟系統上部署使用 + DBeaver 遠程連接 + SQL 數據導入完整流程

&#x1f680; MySQL 在麒麟系統上部署使用 DBeaver 遠程連接 SQL 數據導入完整流程適用于國產操作系統&#xff08;如&#xff1a;麒麟 / 統信 / Ubuntu&#xff09;和 MySQL 8.0。包含遠程配置、授權連接、SQL 導入、DBeaver連接配置等常見問題解決方案。&#x1f4e6; 環境…

C語言-指針初級(指針定義、指針的作用、指針的計算、野指針、懸空指針、void類型指針)

本章概述思維導圖&#xff1a;C語言指針指針是C語言中最強大但也最容易混淆的特性之一。它提供了直接操作內存地址的能力&#xff0c;使得C語言具有高效性和靈活性。下面我將詳細介紹C語言指針的各個方面。指針定義指針的本質&#xff1a;指針是一個變量&#xff0c;其值為另一…

具身智能VLA困于“數據泥潭”,人類活動視頻數據是否是“破局之鑰”?

前言盡管當前的視覺-語言-動作&#xff08;VLA&#xff09;模型已展現出顯著進展&#xff0c;但其在新場景和與復雜物體交互中的性能會顯著下降&#xff0c;在遵循指令方面落后于像LLaVA 這樣的大型多模態模型&#xff08;LMM&#xff09;。這種局限性源于現有VLA模型對存在固有…