原创 [字符串]leetcode389:找不同(easy)

題目: 題解: 題目比較簡單,直接看代碼及註解即可。 代碼如下: class Solution { public: //題解1:統計字符串s和t的26個字母的個數,然後遍歷26個字母,返回不同數量的字母

原创 圖論之最短路徑(Bellman-Ford算法、Dijkstra算法、SPFA算法、Floyd-Warshall算法實現)

前言: 前幾天考研複習了圖論算法,現在抽點時間,寫下博客記錄下。 最短路徑的定義: 給定圖G(V,E),求一條從起點到終點的路徑,使得這條路徑上經過的所有邊的邊權之和最小。 常用的最短路算法有:Bellman-Ford算法、Di

原创 [dfs]leetcode695:島嶼的最大面積(medium)

題目: 題解: dfs 把200. 島嶼數量、1254. 統計封閉島嶼的數目這兩個題目好好做做,你就會發現同樣的套路了。 代碼如下: class Solution { public: int maxAreaOfI

原创 [滑動窗口]面試題 01.06. 字符串壓縮(easy)

題目: 題解: 滑動窗口,當s[i]!=s[j]時,直接將j指針移動到i指針的位置,縮小窗口;當s[i]==s[j]時,i指針右移,擴大窗口。 代碼如下: class Solution { public: //解

原创 [雙重DFS]面試題26. 樹的子結構

題目: 題解: 坑點:A、B爲空樹,這兩棵樹都不相等。。。 剩下的用兩層dfs解決,第一層dfs用來判斷B是否是A的左子樹或右子樹,第二層dfs來判斷B是否是A的子結構。 類似題:572. 另一個樹的子樹 代碼如下: c

原创 [滑動窗口]面試題57 - II. 和爲s的連續正數序列(easy)

題目: 題解: 一看數據量10^5,話不多說,直接滑動窗口,O(n)O(n)O(n)的時間複雜度實現雙100。 代碼如下: class Solution { public: //題解:滑動窗口 vecto

原创 [貪心法]leetcode376:擺動序列(medium)

題目: 題解: 貪心法, 貪心的正確性:可想成求波峯和波谷的個數,就可得證了。 代碼實現:主要使用 flag 來表示前面元素的符號,flag 爲 -1 表示前面兩個元素的差值爲負號,那麼此時我們只有nums[i]>nums[

原创 [bfs]leetcode994:腐爛的橘子(easy)

題目: 994. 腐爛的橘子 題解: bfs模板題 與層序遍歷思想類試,不過將添加一層的每個節點添加左右子節點轉換爲一層每個節點添加4個方向的節點而已,代碼實現也與層序遍歷類試,屬於bfs的模板提。 代碼如下: int

原创 [回溯]面試題38. 字符串的排列(medium)

題目: 題解: 回溯的基本框架,其中索引index用來表示需要進行排列的次數,直到index==n表示我們已經生成一個排列了。 代碼如下: class Solution { public: vector<bool

原创 [dp]leetcode673:最長遞增子序列的個數(medium)

題目: 題解: 動態規劃,在300. 最長上升子序列的基礎上需要記錄最長上升子序列的個數。 代碼如下: class Solution { public: //題解:動態規劃,與300. 最長上升子序列思路一樣的,

原创 [二分法]leetcode1170:比較字符串最小字母出現頻次(easy)

題目: 題解: 使用二分法模板二,首先遍歷words統計最小字母出現的頻率,然後將頻率表進行排序,遍歷二分查找。最後在遍歷queries,使用二分法在頻率表尋找大於queries中單詞最小頻率的最小值,然後添加個數即可。

原创 [鏈表]leetcode817:鏈表組件(medium)

題目: 817. 鏈表組件 題解: 首先先噴題目,題目意思都沒說清楚,鏈表中一段最長連續結點的值這句話到底是啥意思呢? 自己做了第一遍後,發現過不了,然後檢查代碼也沒有發現異常,後來看了評論區才明白題目的意思,所以本題只要

原创 [二分法]leetcode1157:子數組中佔絕大多數的元素(hard)

題目: 題解: 二分法 使用map來存放<元素值,等於該元素值的所有下標>,調用query()時,我們需要遍歷map使用二分法來獲得[left,right]內的元素個數,若元素個數大於等於thresshold,則我們直接返回

原创 [貪心]leetcode1111:有效括號的嵌套深度(medium)

題目: 題解: 代碼如下: class Solution { public: //思路:將原字符串的深度一半給A,一半給B,這樣深度就最小了。如果有一層的括號很多,放同一個子序列也沒有影響 //具體實現:深度爲

原创 [dp]leetcode300:最長上升子序列(medium)

題目: 題解: 思路1:動態規劃,時間複雜度O(n2),空間複雜度爲O(n)。 狀態:dp[i]表示以nums[i]結尾的最長上升子序列的長度 狀態轉移方程:dp[i]=max(dp[i],dp[j]+1)。設j∈[0,i)