第一章 常用的資料結構(下)

2021-10-08 23:31:03 字數 2134 閱讀 6009

雙端佇列

leetcode 239. 滑動視窗最大值

給定乙個陣列 nums,有乙個大小為 k 的滑動視窗從陣列的最左側移動到陣列的最右側。你只可以看到在滑動視窗內的 k 個數字。滑動視窗每次只向右移動一位。

返回滑動視窗中的最大值。

示例:

輸入: nums = [1,3,-1,-3,5,3,6,7], 和 k = 3

輸出: [3,3,5,5,6,7]

解釋:

滑動視窗的位置 最大值

思路:採用雙端佇列來表示當前視窗,雙端佇列保留當前視窗最大那個數的下標,雙端佇列的頭總是當前佇列最大的那個數的下標,(注意雙端佇列一定存放的是下標,如果存放的是數,就無法判斷是否超出當前視窗)。陣列的每乙個數都被壓入和彈出雙端佇列一次,時間複雜度為o(n)。

比較當前數,如果比隊尾元素大,則將隊尾彈出,如果比隊尾元素小,則壓入。

230. 二叉搜尋樹中第k小的元素

給定乙個二叉搜尋樹,編寫乙個函式 kthsmallest 來查詢其中第 k 個最小的元素。

說明:你可以假設 k 總是有效的,1 ≤ k ≤ 二叉搜尋樹元素個數。

示例 1:

輸入: root = [3,1,4,null,2], k = 1

3/ \

1 4

\ 2

輸出: 1

二叉搜尋樹的性質:左子樹《根節點《右子樹

我們只要對二叉樹進行中序遍歷ldr,然後取出第k個元素即可,考察遞迴和中序遍歷的熟悉程度。

/**

* definition for a binary tree node.

* struct treenode

* treenode(int x) : val(x), left(nullptr), right(nullptr) {}

* treenode(int x, treenode *left, treenode *right) : val(x), left(left), right(right) {}

* };

*/class

solution

void

ldr(treenode* root)

};

資料結構第一章

1.程式設計的實質 資料表示和資料處理。資料表示的核心是資料結構,資料處理的核心是演算法。資料結構 演算法 程式 2.資料是資訊的載體,在電腦科學中是指所以所有能 輸入到計算機中並能被識別電腦程式和處理的符號集合。資料的分類 一是整體,實數等數值資料 二是文字,聲音,圖形和影象等非數值資料。資料元素...

資料結構第一章

資料結構第一章 1.1廣播方式傳送檔案 傳送機傳送一次,所有都可接收。優 程式設計容易 傳送速度快 卻 容易丟包 1.2單播方式傳送 一次乙個 1.3改進方式 多級單播傳輸 類傳銷方式 順序儲存 陣列 鏈式 鍊錶 雜湊儲存 資料元素的儲存位置由值確定。資料元素之間的關係通過指標表達。查詢 如果i 某...

資料結構第一章

1.1 計算 計算才是最終的目標 繩索計算器 尺規計算器 通用步驟,給外面的一點做平行線 1.a4 演算法 a5 有窮性 u運算後加到序列中 因為64之後,一直除2都可以.演算法必須是有窮的,但是27這個,是無窮的,序列 是有窮的 但是也是很多 而42只有8個序列 好演算法有人說好演算法是 最重要的...