原创 動態規劃大神總結——必讀

0-1揹包問題(二維dp) 0-1揹包升級版(二維dp) 完全揹包(費解)如湊領錢(一維、二維dp) 子序列問題(重要) 最長遞增子序列(一維dp) 最長公共子序列(二維dp) 最長迴文子序列(二維dp) 最短編輯距離(二維dp)

原创 秋招之路

已投企業/部門 賬號密碼與備註 投遞時間 投遞方式 狀態 招商銀行 2020-08-08 牛客內推 簡歷篩選 綿陽市商業銀行股份有限公司 2020-06-15 官網投遞 簡歷篩選 聯發科/嵌入式開發 2020-0

原创 最長迴文子串模板

這裏先提前注意一下,子串和子序列是兩個不同的東西: 子串:連續的子字符串/數組 子序列:可以不連續(可間斷)的子字符串/數組 迴文串是面試常常遇到的問題(雖然問題本身沒啥意義),本文就告訴你迴文串問題的核心思想是什麼。 首先,明確一下什

原创 面試題62:圓圈中最後剩下的數字(約瑟夫環問題)

1 題目描述   每年六一兒童節,牛客都會準備一些小禮物去看望孤兒院的小朋友,今年亦是如此。HF作爲牛客的資深元老,自然也準備了一些小遊戲。其中,有個遊戲是這樣的:首先,讓小朋友們圍成一個大圈。然後,他隨機指定一個數m,讓編號爲0的小朋友開

原创 面試題59:滑動窗口的最大值

即求隊列的最大值 #include <queue> class Solution { public: vector<int> maxInWindows(const vector<int>& num, unsigned int si

原创 BFS算法框架

BFS算法框架   BFS的核心思想,就是把一些問題抽象成圖,從一個節點開始,向四周擴散。一般來說,寫BFS都是用[隊列]這個數據結構,每次將一個節點周圍的節點加入到隊尾。   BFS相對於DFS的最主要區別是:BFS找到的路徑一定是最短的

原创 二分算法框架

  二分算法的前提是排序數組,通過折半查找的方式,將找到目標值的時間複雜度縮小到O(logn)   最主要的3個問題 查找某元素即返回索引 查找某元素的左邊界索引 查找某元素的右邊界索引 二分算法框架: // 查找某元素即返回索引 in

原创 雙指針算法框架

快慢指針(主要解決鏈表中的問題) 鏈表中是否包括環,進而求鏈表中環的入口節點 鏈表的中間節點(重要作用就是對鏈表進行歸併排序) 鏈表的倒數第k個節點 等等 左右指針(主要解決數組(或者字符串)中的問題) 二分查找 求排序樹組中

原创 面試題57_2:和爲S的連續正數序列

1 題目描述   小明很喜歡數學,有一天他在做數學作業時,要求計算出9~16的和,他馬上就寫出了正確答案是100。但是他並不滿足於此,他在想究竟有多少種連續的正數序列的和爲100(至少包括兩個數)。沒多久,他就得到另一組連續正數和爲100的

原创 面試題57:和爲S的數字

1 題目描述   輸入一個遞增排序的數組和一個數字S,在數組中查找兩個數,使得他們的和正好是S,如果有多對數字的和等於S,輸出兩個數的乘積最小的。 2 輸入 num[], S 3 輸出   輸出兩個數,小的先輸出。 4 樣例輸入 1,2,3

原创 面試題58_2:左旋轉字符串

1 題目描述   彙編語言中有一種移位指令叫做循環左移(ROL),現在有個簡單的任務,就是用字符串模擬這個指令的運算結果。對於一個給定的字符序列S,請你把其循環左移K位後的序列輸出。例如,字符序列S=”abcXYZdef”,要求輸出循環左移

原创 面試題55_1:二叉樹的深度

輸入一棵二叉樹,求該樹的深度。從根結點到葉結點依次經過的結點(含根、葉結點)形成樹的一條路徑,最長路徑的長度爲樹的深度。 解題思路 回溯法 上代碼(C++很香)   回溯法,每次可以向左和向右走,最後統計最大的深度 int maxD

原创 面試題54:二叉搜索樹的第k大節點

統計一個數字在升序數組中出現的次數。 解題思路 中序遍歷遞歸查找到第k個 還可以通過非遞歸的中序遍歷法找到第k個 上代碼(C++很香) 法一:遞歸中序遍歷 TreeNode* ans = nullptr; int countK =

原创 面試題55_2:平衡二叉樹

輸入一棵二叉樹,判斷該二叉樹是否是平衡二叉樹。 在這裏,我們只需要考慮其平衡性,不需要考慮其是不是排序二叉樹 解題思路 根據上一個題目“求二叉樹的深度”,遍歷每一個節點的左右子樹深度 通過“後序遍歷”的特點,每個節點只需要遍歷一次

原创 面試題48:最長不含重複字符的連續子字符串

請從字符串中找出一個最長的不包含重複字符的連續子字符串,計算該最長連續子字符串長度。假設字符串只包含'a'~'z'的字符。例如在字符串"arabcacfr"中,最長連續子字符串爲"acfr",長度爲4。 解題思路   這是一道基礎的動態