【LeetCode】《LeetCode 101》第十一章:妙用數據結構

文章目錄

  • 11.1 C++ STL
  • 11.2 數組
    • 448. 找到所有數組中消失的數字(簡單)
    • 48. 旋轉圖像(中等)
    • 74. 搜索二維矩陣(中等)
    • 240. 搜索二維矩陣 II(中等)
    • 769. 最多能完成排序的塊(中等)
    • 768. 最多能完成排序的塊 II(困難)
  • 11.3 棧和隊列
    • 232. 用棧實現隊列(簡單)
    • 155. 最小棧(中等)
    • 20. 有效的括號(簡單)
  • 11.4 單調棧
    • 739. 每日溫度(中等)
  • 11.5 優先隊列
    • 23. 合并 K 個升序鏈表(困難)
    • 218. 天際線問題(困難)
  • 11.6 雙端隊列
    • 239. 滑動窗口最大值(困難)
  • 11.7 哈希表
    • 1. 兩數之和(簡單)
    • 128. 最長連續序列(中等)
    • 149. 直線上最多的點數(困難)
  • 11.8 多重集合和映射
    • 332. 重新安排行程(困難)
  • 11.9 前綴和與積分圖
    • 303. 區域和檢索 - 數組不可變(簡單)
    • 304. 二維區域和檢索 - 矩陣不可變(中等)
    • 560. 和為 K 的子數組(中等)
  • 11.10 練習
    • 566. 重塑矩陣(簡單)
    • 225. 用隊列實現棧(簡單)
    • 503. 下一個更大元素 II(中等)
    • 217. 存在重復元素(簡單)
    • 697. 數組的度(簡單)
    • 594. 最長和諧子序列(簡單)
    • 287 . 尋找重復數(中等)
    • 313. 超級丑數
    • 870 . 優勢洗牌
    • 307 . 區域和檢索 - 數組可修改

11.1 C++ STL

C++ 提供的數據結構包括:

  1. Sequence Containers:維持順序的容器。

    • vector:動態數組,用于 O(1) 的隨機讀取。因為大部分算法的時間復雜度都會大于 O(n) ,因此我們經常新建 vector 來存儲各種數據或中間變量。
    • list:雙向鏈表,也可以當作 stack 和 queue 來使用。由于 LeetCode 的題目多用 Node 來表示鏈表,且鏈表不支持快速隨機讀取,因此很少用到該數據結構。 一個例外是經典的 LRU 問題,需要利用鏈表的特性來解決。
    • deque:雙端隊列,既支持 O(1) 的隨機讀取,又支持 O(1) 時間的頭部增刪和尾部增刪,不過有一定的額外開銷。
    • array:固定大小的數組,一般不使用。
    • forward_list:單向鏈表,一般不使用。
  2. Container Adaptors:基于其他容器實現的數據結構。

    • stack:后入先出(LIFO) 的數據結構,默認基于 deque 實現,stack常用于深度優先搜索、字符串匹配問題以及單調棧問題
    • queue:先入先出(FIFO) 的數據結構,默認基于 deque 實現,queue 常用于廣度優先搜索
    • priority_queue:最大值先出的數據結構,默認基于 vector 是實現堆結構。它可以在 O(n logn) 的時間排序數組, O(logn) 的時間插入任意值,O(1) 的時間獲得最大值, O(logn) 的時間刪除最大值。 priority_queue 常用于維護數據結構并快速獲取最大或最小值。
  3. Associative Containers:實現了排好序的數據結構。

    • set:有序集合,元素不可以重復,底層實現默認為紅黑樹,即一種特殊的二叉查找樹(BST)。它可以在 O(nlogn) 的時間排序數組,O(logn) 的時間插入、刪除、查找任意值,O(logn) 的時間獲得最小或最大值。

      這里注意,set 和 priority_queue 都可以用于維護數據結構并快速獲取最大最小值,但是它們的時間復雜度和功能略有區別。比如, priority_queue 默認不支持刪除任意值,而 set 獲得最大或最小值的時間復雜度略高。

    • multiset:支持重復元素的 set

    • map: 有序映射或有序表,在 set 的基礎上加上映射關系,可以對每個元素 key 存一個值 value。

    • multimap:支持重復元素的 map

  4. Unordered Associative Containers:對每個 Associative Containers 實現了哈希版本

    • unordered_set :哈希集合,可以在 O(1) 的時間快速插入、查找、刪除元素,常用于快速查詢一個元素是否在這個容器內。
    • unordered_multiset:支持重復元素的 unordered_set 。
    • unordered_map:哈希映射或哈希表,在 unordered_set 的基礎上加上映射關系,可以對每一個元素 key 存一個值 value。在某些情況下,如果 key 的范圍已知且較小,我們也可以用 vector 代替 unordered_map,用位置表示 key,每個位置的值表示 value。
    • unordered_multimap:支持重復元素的 unordered_map。

11.2 數組

448. 找到所有數組中消失的數字(簡單)

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

思路及代碼: 448. 找到所有數組中消失的數字

48. 旋轉圖像(中等)

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

思路及代碼: 48. 旋轉圖像

74. 搜索二維矩陣(中等)

在這里插入圖片描述
在這里插入圖片描述在這里插入圖片描述
在這里插入圖片描述

思路及代碼: 74. 搜索二維矩陣

240. 搜索二維矩陣 II(中等)

在這里插入圖片描述在這里插入圖片描述

在這里插入圖片描述
在這里插入圖片描述

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

思路及代碼:240. 搜索二維矩陣 II

769. 最多能完成排序的塊(中等)

在這里插入圖片描述
在這里插入圖片描述

思路及代碼: 769. 最多能完成排序的塊

768. 最多能完成排序的塊 II(困難)

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
思路及代碼: 768. 最多能完成排序的塊 II

11.3 棧和隊列

232. 用棧實現隊列(簡單)

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

思路及代碼: 232. 用棧實現隊列

155. 最小棧(中等)

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

思路及代碼: 155. 最小棧

20. 有效的括號(簡單)

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

思路及代碼: 20. 有效的括號

11.4 單調棧

單調棧 通過維持棧內值的單調遞增(遞減)性,在整體 O(n) 的時間內處理需要大小比較的問題。

739. 每日溫度(中等)

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

思路及代碼: 739. 每日溫度

11.5 優先隊列

  • 優先隊列可以在 O(1) 時間內獲得最大值,并且可以在 O(log n) 時間內取出最大值或插入任意值。

  • 優先隊列常常用 來實現。堆是一個完全二叉樹,其每個節點的值總是大于等于子節點的值。實際實現堆的時候,通常用數組而不是指針建立一個樹,這是因為堆是完全二叉樹,所以用數組表示的時候,位置 i 的節點的父節點位置一定是 (i-1)/2 ,而它的兩個子節點的位置又一定分別為 2i+12i+2

  • 以下是堆的實現方法,其中最核心的兩個操作是上浮下沉:.

    • 如果一個節點比父節點大,那么需要交換這兩個節點;交換后它可能比新的父節點還大,因此需要不斷進行比較和交換操作,稱之為上浮

    • 如果一個節點比父節點小,那么也需要不斷地進行向下比較和交換操作,稱之為下沉

      如果一個節點有兩個子節點,我們總是交換最大的子節點。

vector<int> heap;// 上浮
void swim(int pos){while(pos > 0 && heap[(pos-1)/2] < heap[pos]){swap(heap[(pos-1)/2], heap[pos]);pos = (pos - 1) / 2;}
}// 下沉
void sink(int pos){while(2 * pos + 1 <= N){int i = 2 * pos + 1;// 兩個子節點進行比較,找到更大的子節點if(i < N && heap[i] < heap[i+1]) ++i;if(heap[pos] >= heap[i]) break;swap(heap[pos], heap[i]);pos = i;}
}// 插入任意值:把新數字放到最后一位,然后上浮
void push(int k){heap.push_back(k);swim(heap.size()-1);
}// 刪除最大值:把最后一個數字挪到開頭,然后下沉
void pop(){// 原本的heap[0]就是最大值heap[0] = heap.back();heap.pop_back();sink(0);
} // 獲取最大值
int top(){return heap[0];
}
  • 通過將算法中的大于號和小于號互換,我們也可以得到一個快速獲得最小值的優先隊列
  • 另外,如果在維持大小關系的同時,還需要支持查找任意值、刪除任意值、維護所有數字的大小關系等操作,可以考慮使用 set 或 map來代替優先隊列。

23. 合并 K 個升序鏈表(困難)

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

思路及代碼: 23. 合并 K 個升序鏈表

218. 天際線問題(困難)

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
思路及代碼: 218. 天際線問題

11.6 雙端隊列

239. 滑動窗口最大值(困難)

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

思路及代碼: 239. 滑動窗口最大值

11.7 哈希表

  • 哈希表 ,又稱散列表,使用 O(n) 空間復雜度存儲數據,通過哈希函數映射位置,從而實現近似 O(1) 時間復雜度的插入、查找和刪除操作。
  • c++ 中的哈希集為 unordered_set ,可以查找元素是否在集合中,如果需要同時存儲鍵和值,則需要用 unordered_map,可以用來統計頻率,記錄內容等。如果元素有限個,并且范圍不大,則可以用一個固定大小的數組來存儲或統計元素。例如我們需要統計一個字符串中所有字母的出現次數,則可以用一個長度為 26 的數組來進行統計,其哈希函數即為字母在字母表的位置,這樣空間復雜度就可以降為常數。

1. 兩數之和(簡單)

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

思路及代碼: 1. 兩數之和

128. 最長連續序列(中等)

在這里插入圖片描述

在這里插入圖片描述
在這里插入圖片描述

思路及代碼: 128. 最長連續序列

149. 直線上最多的點數(困難)

在這里插入圖片描述

在這里插入圖片描述

在這里插入圖片描述
在這里插入圖片描述

思路及代碼: 149. 直線上最多的點數

11.8 多重集合和映射

332. 重新安排行程(困難)

在這里插入圖片描述

在這里插入圖片描述

在這里插入圖片描述

在這里插入圖片描述

思路及代碼: 332. 重新安排行程

11.9 前綴和與積分圖

  • 一維的前綴和,二維的積分圖,都是把每個位置之前的一維線段或二維矩形預先存儲,方便加速計算。如果需要對前綴和或積分圖的值做尋址,則要存在哈希表里;如果要對每個位置記錄前綴和或積分圖的,則可以存儲到一維或二維數組里,常常伴隨著動態規劃。

303. 區域和檢索 - 數組不可變(簡單)

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

思路與代碼: 303. 區域和檢索 - 數組不可變

304. 二維區域和檢索 - 矩陣不可變(中等)

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

思路及代碼: 304. 二維區域和檢索 - 矩陣不可變

560. 和為 K 的子數組(中等)

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

思路及代碼: 560. 和為 K 的子數組

11.10 練習

566. 重塑矩陣(簡單)

在這里插入圖片描述
在這里插入圖片描述

在這里插入圖片描述在這里插入圖片描述

思路及代碼: 566. 重塑矩陣

225. 用隊列實現棧(簡單)

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

思路及代碼: 225. 用隊列實現棧

503. 下一個更大元素 II(中等)

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

思路及代碼: 503. 下一個更大元素 II

217. 存在重復元素(簡單)

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

思路及代碼: 217. 存在重復元素

697. 數組的度(簡單)

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

思路及代碼: 697. 數組的度

594. 最長和諧子序列(簡單)

在這里插入圖片描述

在這里插入圖片描述

在這里插入圖片描述

思路及代碼: 594. 最長和諧子序列

287 . 尋找重復數(中等)

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

思路及代碼: 287. 尋找重復數

313. 超級丑數

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

思路及代碼: 313. 超級丑數

870 . 優勢洗牌

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

思路及代碼: 870 . 優勢洗牌

307 . 區域和檢索 - 數組可修改

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

思路及代碼: 307 . 區域和檢索 - 數組可修改

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

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

相關文章

java重寫與重載的區別

在Java中&#xff0c;重寫&#xff08;Override&#xff09;和重載&#xff08;Overload&#xff09;是兩種不同的概念&#xff1a; 重寫&#xff08;Override&#xff09;&#xff1a; 重寫是指子類重新定義&#xff08;覆蓋&#xff09;了從父類繼承而來的方法。重寫要求子類…

ROSpider機器人評測報告

ROSpider機器人評測報告 最近入手了一款ROSpider六足仿生機器人&#xff0c;ROSpider是一款基于ROS 操作系統開發的智能視覺六足機器人。 外觀 外觀上ROSpider六足機器人如同名字一樣有六只機械腿&#xff0c;整體來看像一只六腿的蜘蛛。腿上的關節處用了明亮的橙黃色很是顯…

Redis實現消息的發布和訂閱

Redis實現消息的發布和訂閱 1、在springboot項目的pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schem…

cookie和session的區別,分布式環境怎么保存用戶狀態

1、cookie數據存放在客戶的瀏覽器上&#xff0c;session數據放在服務器上。 2、cookie不是很安全&#xff0c;別人可以分析存放在本地的COOKIE并進行COOKIE欺騙&#xff0c;考慮到安全應當使用session。 3、session會在一定時間內保存在服務器上。當訪問增多&#xff0c;會比…

js和cocos creator學習筆記

1.Javascript有哪些數據類型?舉例兩個最常見的內置對象數據類型? 常用的數據類型:Number,String,Boolean,Null,Undefined,Object 常見內置對象:Array,Function2.下面代碼輸出內容是什么? let a []; a[10] 10; console.log(a.length); console.log(a[0]); a[200] undefi…

arcpy創建基本要素:折線和多邊形

目錄 創建Polyline折線要素步驟一&#xff1a;創建空間參考步驟二&#xff1a;創建屬性類步驟三&#xff1a;創建字段步驟四&#xff1a;創建記錄并插入幾何信息 創建Polygon多邊形要素步驟一&#xff1a;創建空間參考&#xff08;同上&#xff09;步驟二&#xff1a;創建要素類…

Redis使用Lua腳本和Redisson來保證庫存扣減中的原子性和一致性

文章目錄 前言1.使用SpringBoot Redis 原生實現方式2.使用redisson方式實現3. 使用RedisLua腳本實現3.1 lua腳本代碼邏輯 3.2 與SpringBoot集成 4. Lua腳本方式和Redisson的方式對比5. 源碼地址6. Redis從入門到精通系列文章7. 參考文檔 前言 背景&#xff1a;最近有社群技術交…

C++——函數重載及底層原理

函數重載的定義 函數重載&#xff1a; 是函數的一種特殊情況&#xff0c;C允許在同一作用域重聲明幾個功能類似的同名函數&#xff0c;這些同名函數的形參列表&#xff08;參數個數或者類型&#xff0c;類型的順序&#xff09;不同&#xff0c;常用來處理實現功能類似數據結構…

C語言字符串拷貝函數詳解及示例代碼

目錄 簡介字符串拷貝函數 strcpy字符串拷貝函數 strcpy_s使用示例注意事項結束語 1. 簡介 字符串拷貝是C語言中常用的操作之一。當需要將一個字符串復制到另一個字符串數組中時&#xff0c;可以使用字符串拷貝函數來實現。C語言提供了多種字符串拷貝函數&#xff0c;其中最常…

春秋云鏡 CVE-2021-41947

春秋云鏡 CVE-2021-41947 Subrion CMS v4.2.1 存在sql注入 靶標介紹 Subrion CMS v4.2.1 存在sql注入。 啟動場景 漏洞利用 exp http://localhost/panel/visual-mode.json?getaccess&typeblocks UNION ALL SELECT username, password FROM sbr421_members -- -&o…

【需求輸出】流程圖輸出

文章目錄 1、什么是流程圖2、繪制流程圖的工具和基本要素3、流程圖的分類和應用場景4、如何根據具體場景輸出流程圖 1、什么是流程圖 2、繪制流程圖的工具和基本要素 3、流程圖的分類和應用場景 4、如何根據具體場景輸出流程圖

Dubbo1-架構的演變

分布式系統上的相關概念 項目&#xff1a;傳統項目、互聯網項目 傳統項目&#xff1a; 一般為公司內部使用&#xff0c;或者小群體小范圍的使用&#xff0c;一般不要求性能&#xff0c;美觀&#xff0c;并發等 互聯網項目的特點&#xff1a; 1.用戶多 2.流量大&#xff0c;并…

用python來爬取某魚的商品信息(2/2)

目錄 上一篇文章 本章內容 設置瀏覽器為運行結束后不關閉&#xff08;可選&#xff09; 定位到搜索框的xpath地址 執行動作 獲取cookie 保存為json文件 修改cookie的sameSite值并且導入cookie 導入cookie&#xff08;出錯&#xff09; 導入cookie&#xff08;修改后&…

Android Ble藍牙App(五)數據操作

Ble藍牙App&#xff08;五&#xff09;數據操作 前言正文一、操作內容處理二、讀取數據① 概念② 實操 三、寫入數據① 概念② 實操 四、打開通知一、概念二、實操三、收到數據 五、源碼 前言 關于低功耗藍牙的服務、特性、屬性、描述符都已經講清楚了&#xff0c;而下面就是使…

電腦系統重裝日記

重裝原因 電腦C盤幾乎爆炸故重裝系統一清二白 此片原因 記錄重裝過程&#xff0c;強調一些要注意的點&#xff0c;以防日后重裝。 重裝過程 1.清空電腦文件后重啟&#xff0c;電腦冒藍光&#xff0c;一直藍屏反復重啟&#xff0c;故只能重裝系統以解難題。 2.準備一個U盤&…

設計HTML5文檔結構

定義清晰、一致的文檔結構不僅方便后期維護和拓展&#xff0c;同時也大大降低了CSS和JavaScript的應用難度。為了提高搜索引擎的檢索率&#xff0c;適應智能化處理&#xff0c;設計符合語義的結構顯得很重要。 1、頭部結構 在HTML文檔的頭部區域&#xff0c;存儲著各種網頁元…

Python Opencv實踐 - 圖像屬性相關

import numpy as np import cv2 as cv import matplotlib.pyplot as pltimg cv.imread("../SampleImages/pomeranian.png", cv.IMREAD_COLOR) plt.imshow(img[:,:,::-1])#像素操作 pixel img[320,370] print(pixel)#只獲取藍色通道的值 pixel_blue img[320,370,0]…

【Hystrix技術指南】(7)故障切換的運作流程原理分析(含源碼)

背景介紹 目前對于一些非核心操作&#xff0c;如增減庫存后保存操作日志發送異步消息時&#xff08;具體業務流程&#xff09;&#xff0c;一旦出現MQ服務異常時&#xff0c;會導致接口響應超時&#xff0c;因此可以考慮對非核心操作引入服務降級、服務隔離。 Hystrix說明 官方…

Grounding DINO:根據文字提示檢測任意目標

文章目錄 1. 背景介紹2. 方法創新2.1 Feature Extraction and Enhancer2.2 Language-Guided Query Selection2.3 Cross-Modality Decoder2.4 Sub-Sentence Level Text Feature2.5 Loss Function3. 實驗結果3.1 Zero-Shot Transfer of Grounding DINO3.2 Referring Object Detec…

設備管理系統能起到什么作用?

在現代工業運營中&#xff0c;設備的高效管理和維護對于保障生產穩定運行和提升企業競爭力至關重要。而設備管理系統作為一種關鍵工具&#xff0c;能夠極大地提高企業的生產效率和設備維護的準確性。本文將深入探討設備管理系統的作用&#xff0c;以PreMaint設備數字化平臺為例…