2020.12.21-2020.12.27 leetcode刷題總結(拓撲排序&蓄水池抽樣&二叉搜尋樹&線段樹)
拓撲排序
一.題目列表
1.課程表
題目描述:
你這個學期必須選修 numCourse 門課程,記為 0 到 numCourse-1 。
在選修某些課程之前需要一些先修課程。 例如,想要學習課程 0 ,你需要先完成課程 1 ,我們用一個匹配來表示他們:[0,1]
給定課程總量以及它們的先決條件,請你判斷是否可能完成所有課程的學習?
示例:
輸入: 2, [[1,0]]
輸出: true
解釋: 總共有 2 門課程。學習課程 1 之前,你需要完成課程 0。所以這是可能的。
題解:
2.課程表 II
題目描述:
現在你總共有 n 門課需要選,記為 0 到 n-1。
在選修某些課程之前需要一些先修課程。 例如,想要學習課程 0 ,你需要先完成課程 1 ,我們用一個匹配來表示他們: [0,1]
給定課程總量以及它們的先決條件,返回你為了學完所有課程所安排的學習順序。
可能會有多個正確的順序,你只要返回一種就可以了。如果不可能完成所有課程,返回一個空陣列。
示例:
輸入: 2, [[1,0]]
輸出: [0,1]
解釋: 總共有 2 門課程。要學習課程 1,你需要先完成課程 0。因此,正確的課程順序為 [0,1] 。
題解:
蓄水池抽樣
一.題目列表
1.隨機數索引
題目描述:
給定一個可能含有重複元素的整數陣列,要求隨機輸出給定的數字的索引。 您可以假設給定的數字一定存在於陣列中。
示例:
int[] nums = new int[] {1,2,3,3,3};
Solution solution = new Solution(nums);
// pick(3) 應該返回索引 2,3 或者 4。每個索引的返回概率應該相等。
solution.pick(3);
// pick(1) 應該返回 0。因為只有nums[0]等於1。
solution.pick(1);
題解:
2.連結串列隨機節點
題目描述:
給定一個單連結串列,隨機選擇連結串列的一個節點,並返回相應的節點值。保證每個節點被選的概率一樣。
示例:
// 初始化一個單連結串列 [1,2,3].
ListNode head = new ListNode(1);
head.next = new ListNode(2);
head.next.next = new ListNode(3);
Solution solution = new Solution(head);
// getRandom()方法應隨機返回1,2,3中的一個,保證每個元素被返回的概率相等。
solution.getRandom();
題解:
二叉搜尋樹
一.題目列表
1.BiNode
題目描述:
二叉樹資料結構TreeNode可用來表示單向連結串列(其中left置空,right為下一個連結串列節點)。實現一個方法,把二叉搜尋樹轉換為單向連結串列,要求依然符合二叉搜尋樹的性質,轉換操作應是原址的,也就是在原始的二叉搜尋樹上直接修改。
返回轉換後的單向連結串列的頭節點。
示例:
輸入: [4,2,5,1,3,null,6,0]
輸出: [0,null,1,null,2,null,3,null,4,null,5,null,6]
題解:
2.將二叉搜尋樹變平衡
題目描述:
給你一棵二叉搜尋樹,請你返回一棵 平衡後 的二叉搜尋樹,新生成的樹應該與原來的樹有著相同的節點值。
如果一棵二叉搜尋樹中,每個節點的兩棵子樹高度差不超過 1 ,我們就稱這棵二叉搜尋樹是 平衡的 。
示例:
輸入:root = [1,null,2,null,3,null,4,null,null]
輸出:[2,1,3,null,null,null,4]
解釋:這不是唯一的正確答案,[3,1,4,null,2,null,null] 也是一個可行的構造方案。
題解:
**3.把二叉搜尋樹轉換為累加樹 **
題目描述:
給出二叉 搜尋 樹的根節點,該樹的節點值各不相同,請你將其轉換為累加樹(Greater Sum Tree),使每個節點 node 的新值等於原樹中大於或等於 node.val 的值之和。
示例:
輸入:[4,1,6,0,2,5,7,null,null,null,3,null,null,null,8]
輸出:[30,36,21,36,35,26,15,null,null,null,33,null,null,null,8]
題解:
線段樹
一.題目列表
1.區域和檢索 - 陣列可修改
題目描述:
給定一個整數陣列 nums,求出陣列從索引 i 到 j (i ≤ j) 範圍內元素的總和,包含 i, j 兩點。
update(i, val) 函式可以通過將下標為 i 的數值更新為 val,從而對數列進行修改。
示例:
Given nums = [1, 3, 5]
sumRange(0, 2) -> 9
update(1, 2)
sumRange(0, 2) -> 8
題解:
相關文章
- CF798E. Mike and code of a permutation [拓撲排序 線段樹]排序
- js實現完全排序二叉樹、二叉搜尋樹JS排序二叉樹
- 蓄水池抽樣及Google搜尋之星分析Go
- 資料結構中的樹(二叉樹、二叉搜尋樹、AVL樹)資料結構二叉樹
- 二叉搜尋樹的結構
- 二叉搜尋樹
- 一文搞定二叉排序(搜尋)樹排序
- Leetcode刷題筆記 501. 二叉搜尋樹中的眾數LeetCode筆記
- 線段樹(毒瘤)總結
- 線段樹模板總結
- 資料結構-二叉搜尋樹資料結構
- 【資料結構】二叉搜尋樹!!!資料結構
- Leetcode 700. 二叉搜尋樹中的搜尋(DAY 2)LeetCode
- 資料結構之樹結構概述(含滿二叉樹、完全二叉樹、平衡二叉樹、二叉搜尋樹、紅黑樹、B-樹、B+樹、B*樹)資料結構二叉樹
- 資料結構之「二叉搜尋樹」資料結構
- 資料結構☞二叉搜尋樹BST資料結構
- 【LeetCode】98. 驗證二叉搜尋樹LeetCode
- LeetCode 95 | 構造出所有二叉搜尋樹LeetCode
- LeetCode-173-二叉搜尋樹迭代器LeetCode
- LeetCode98. 驗證二叉搜尋樹LeetCode
- LeetCode刷題記63-109. 有序連結串列轉換二叉搜尋樹【檢視解法】LeetCode
- Day20 | 654.最大二叉樹 、 617.合併二叉樹 、 700.二叉搜尋樹中的搜尋 98.驗證二叉搜尋樹二叉樹
- leetcode 700. 二叉搜尋樹中的搜尋 思考分析LeetCode
- LeetCode 刷題—樹LeetCode
- 程式碼隨想錄 第20天 20的總結沒看 | 654.最大二叉樹 ● 617.合併二叉樹 ● 700.二叉搜尋樹中的搜尋 ● 98.驗證二叉搜尋樹二叉樹
- LeetCode系列之「有序連結串列轉換二叉搜尋樹」LeetCode
- 二叉搜尋樹和二叉樹的最近公共祖先二叉樹
- 線段樹經驗及總結
- 線段樹知識點總結
- 線段樹的一點總結
- 面試題36:二叉搜尋樹與雙向連結串列面試題
- 滿二叉樹、完全二叉樹、平衡二叉樹、二叉搜尋樹(二叉查詢樹)和最優二叉樹二叉樹
- 程式碼隨想錄 第23天 | 669. 修剪二叉搜尋樹 ● 108.將有序陣列轉換為二叉搜尋樹 ● 538.把二叉搜尋樹轉換為累加樹 ● 總結篇陣列
- [leetCode]95. 不同的二叉搜尋樹 IILeetCode
- 【ALGO】Leetcode 98.驗證二叉搜尋樹GoLeetCode
- leetcode-1382. 將二叉搜尋樹變平衡LeetCode
- LeetCode-096-不同的二叉搜尋樹LeetCode
- LeetCode-098-驗證二叉搜尋樹LeetCode