原创 動態規劃(Dynamic Programming)

動態規劃 “動態規劃”問題的思考路徑,供大家參考: 1、思考狀態 狀態先嚐試“題目問什麼,就把什麼設置爲狀態”。然後緊接着考慮“狀態該如何轉移?”,如果“狀態轉移方程”不容易得到,就嘗試修改其定義,但目的仍然是爲了方便得到“狀態

原创 &LeetCode0002& 兩數相加

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

原创 &LeetCode0005& 最長迴文子串

題目 給定一個字符串 s,找到 s 中最長的迴文子串。你可以假設 s 的最大長度爲 1000。 示例 1: 輸入: “babad” 輸出: “bab” 注意: “aba” 也是一個有效答案。 示例 2: 輸入: “cbbd”

原创 馬拉車算法(Manacher's Algorithm)

提示 來自此處

原创 C++中accumulate的用法

std::accumulate 定義於頭文件< numeric> template< class InputIt, class T > constexpr T accumulate( InputIt first, InputIt

原创 &LeetCode137& 只出現一次的數字 II

題目 給定一個非空整數數組,除了某個元素只出現一次以外,其餘每個元素均出現了三次。找出那個只出現了一次的元素。 說明: 你的算法應該具有線性時間複雜度。 你可以不使用額外空間來實現嗎? 示例 1: 輸入: [2,2,3,2] 輸出

原创 &LeetCode401& 二進制手錶

題目 二進制手錶頂部有 4 個 LED 代表小時(0-11),底部的 6 個 LED 代表分鐘(0-59)。 每個 LED 代表一個 0 或 1,最低位在右側。 例如,上面的二進制手錶讀取 “3:25”。 給定一個非負整數 n

原创 &LeetCode144& 二叉樹的前序遍歷

題目 給定一個二叉樹,返回它的前序遍歷。 示例: 輸入: [1,null,2,3] 1 2 / 3 輸出: [1,2,3] 來源:力扣(LeetCode) 思路 二叉樹的中序遍歷順序爲左-根-右; 使用棧的解法: 首先,從根節點

原创 &LeetCode125& 驗證迴文串

題目 給定一個字符串,驗證它是否是迴文串,只考慮字母和數字字符,可以忽略字母的大小寫。 說明:本題中,我們將空字符串定義爲有效的迴文串。 示例 1: 輸入: “A man, a plan, a canal: Panama” 輸出:

原创 &LeetCode145& 二叉樹的後序遍歷

題目 給定一個二叉樹,返回它的 後序 遍歷。 示例: 輸入: [1,null,2,3] 1 2 / 3 輸出: [3,2,1] 來源:力扣(LeetCode) 思路 後序遍歷的順序是左-右-根; 首先,先將先序遍歷的根-左-右順

原创 &LeetCode88& 合併兩個有序數組

題目 給定兩個有序整數數組 nums1 和 nums2,將 nums2 合併到 nums1 中,使得 num1 成爲一個有序數組。 說明: 初始化 nums1 和 nums2 的元素數量分別爲 m 和 n。 你可以假設 nums1

原创 &LeetCode344& 反轉字符串

題目 編寫一個函數,其作用是將輸入的字符串反轉過來。輸入字符串以字符數組 char[] 的形式給出。 不要給另外的數組分配額外的空間,你必須原地修改輸入數組、使用 O(1) 的額外空間解決這一問題。 你可以假設數組中的所有字符都是

原创 &LeetCode111& 二叉樹的最小深度

題目 給定一個二叉樹,找出其最小深度。 最小深度是從根節點到最近葉子節點的最短路徑上的節點數量。 說明: 葉子節點是指沒有子節點的節點。 示例: 給定二叉樹 [3,9,20,null,null,15,7], 3 / 9 20

原创 &LeetCode874& 模擬行走機器人

題目 機器人在一個無限大小的網格上行走,從點 (0, 0) 處開始出發,面向北方。該機器人可以接收以下三種類型的命令: -2:向左轉 90 度 -1:向右轉 90 度 1 <= x <= 9:向前移動 x 個單位長度 在網格上有

原创 &LeetCode690& 員工的重要性

題目 給定一個保存員工信息的數據結構,它包含了員工唯一的id,重要度 和 直系下屬的id。 比如,員工1是員工2的領導,員工2是員工3的領導。他們相應的重要度爲15, 10, 5。那麼員工1的數據結構是[1, 15, [2]],員