原创 從前序與中序(中序和後序)遍歷序列構造二叉樹

題1: 根據一棵樹的前序遍歷與中序遍歷構造二叉樹。 注意: 你可以假設樹中沒有重複的元素。 例如,給出 前序遍歷 preorder = [3,9,20,15,7] 中序遍歷 inorder = [9,3,15,20,7] 返回如下

原创 給懶人寫的優勢洗牌

給定兩個大小相等的數組 A 和 B,A 相對於 B 的優勢可以用滿足 A[i] > B[i] 的索引 i 的數目來描述。 返回 A 的任意排列,使其相對於 B 的優勢最大化。 難點分析: 如何貪心匹配 如何保存匹配結果 貪心匹

原创 層數最深葉子節點的和之超簡單

給你一棵二叉樹,請你返回層數最深的葉子節點的和。 示例: 輸入:root = [1,2,3,4,5,null,6,7,null,null,null,null,8] 輸出:15 提示: 樹中節點數目在 1 到 10^4 之間。 每個

原创 力扣 二叉樹的層序遍歷

給你一個二叉樹,請你返回其按 層序遍歷 得到的節點值。 (即逐層地,從左到右訪問所有節點)。 思路:這道題要求將樹每一層的值存一個列表,所有層的列表存一個列表中 所以使用BFS(廣度優先),逐層遍歷(同時確定遍歷的層數)是可行的

原创 兩地調度之超易懂的貪心算法問題

公司計劃面試 2N 人。第 i 人飛往 A 市的費用爲 costs[i][0],飛往 B 市的費用爲 costs[i][1]。 返回將每個人都飛到某座城市的最低費用,要求每個城市都有 N 人抵達。 例如: 輸入:[[10,20],

原创 鏈表之超直白的兩數相加

給出兩個 非空 的鏈表用來表示兩個非負的整數。其中,它們各自的位數是按照 逆序 的方式存儲的,並且它們的每個節點只能存儲 一位 數字。 如果,我們將這兩個數相加起來,則會返回一個新的鏈表來表示它們的和。 您可以假設除了數字 0 之

原创 力扣 103. 二叉樹的鋸齒形層次遍歷

給定一個二叉樹,返回其節點值的鋸齒形層次遍歷。(即先從左往右,再從右往左進行下一層遍歷,以此類推,層與層之間交替進行)。 思路:逐層遍歷,所以優先選擇BFS(寬度優先) 如果正常順序(統一從左到右)的話,可以先看這個二叉樹的層序

原创 利用前中遍歷重創二叉樹

題目:輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。 例如給出: 前序遍歷 preorder = [3,9,20,15,7] 中序遍歷 inorder = [9,3,

原创 重疊區間問題之逆思維的貪心算法

給定一個區間的集合,找到需要移除區間的最小數量,使剩餘區間互不重疊。 注意: 可以認爲區間的終點總是大於它的起點。 區間 [1,2] 和 [2,3] 的邊界相互“接觸”,但沒有相互重疊。 本題主要有兩個難點: 如何找到貪心策略

原创 不同路徑之深度遍歷模型

給定一個二叉樹和一個目標和,判斷該樹中是否存在根節點到葉子節點的路徑,這條路徑上所有節點值相加等於目標和。 說明: 葉子節點是指沒有子節點的節點。 示例: 給定如下二叉樹,以及目標和 sum = 22, 5

原创 壞了的計算器之逆向思維的貪心問題

在顯示着數字的壞計算器上,我們可以執行以下兩種操作: 雙倍(Double):將顯示屏上的數字乘 2; 遞減(Decrement):將顯示屏上的數字減 1 。 最初,計算器顯示數字 X。 返回顯示數字 Y 所需的最小操作數。 例如:

原创 有效括號的嵌套深度之簡單方法

**有效括號字符串 定義:對於每個左括號,都能找到與之對應的右括號,反之亦然。詳情參見題末「有效括號字符串」部分。 嵌套深度 depth 定義:即有效括號字符串嵌套的層數,depth(A) 表示有效括號字符串 A 的嵌套深度。詳情

原创 最長快樂字符串——zkp~

如果字符串中不含有任何 ‘aaa’,‘bbb’ 或 ‘ccc’ 這樣的字符串作爲子串,那麼該字符串就是一個「快樂字符串」。 給你三個整數 a,b ,c,請你返回 任意一個 滿足下列全部條件的字符串 s: s 是一個儘可能長的快樂字

原创 劃分數組爲連續數字的集合

給你一個整數數組 nums 和一個正整數 k,請你判斷是否可以把這個數組劃分成一些由 k 個連續數字組成的集合。 如果可以,請返回 True;否則,返回 False。 現在做了幾十到貪心算法之後,發現貪心策略並不難找,而是用什麼樣

原创 LeetCode 767. 秒懂重構字符串

給定一個字符串S,檢查是否能重新排布其中的字母,使得兩相鄰的字符不同。 若可行,輸出任意可行的結果。若不可行,返回空字符串。 例子: 輸入: S = “aab” 輸出: “aba” 難點分析: 如何斷定是否可構 若可構,如何貪心