原创 劍指Offer——JZ33.醜數

題目傳送門 題解 自底向上的思維方式,用乘法去升序得到每一個醜數 AC-Code class Solution { public: int GetUglyNumber_Solution(int index) {

原创 劍指Offer——JZ35.數組中的逆序對【樹狀數組】

題目傳送門 題解 非常簡單的樹狀數組應用 需要離散化,離散後編號的的逆序對和之前相同 AC-Code class Solution { #define lowbit(x) (x&-x) private: con

原创 劍指Offer——JZ34.第一個只出現一次的字符【bitset】

題目傳送門 題解 bitset佔用內存更小。 進階題目:JZ54.字符流中第一個不重複的字符 AC-Code class Solution { public: int FirstNotRepeatingChar

原创 劍指Offer——JZ38.二叉樹的深度

題目傳送門 題解 sb題,不多bb AC-Code /* struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; Tr

原创 劍指Offer——JZ36.兩個鏈表的第一個公共結點【思維】

題目傳送門 題解 AC-Code /* struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NUL

原创 劍指Offer——JZ39.平衡二叉樹【DFS】

題目傳送門 題解 所求即爲:是否有節點的左右子樹高度差 > 1 樹上dfs跑一下即可 AC-Code class Solution { public: bool IsBalanced_Solution(Tree

原创 劍指Offer——JZ37.數字在排序數組中出現的次數【二分】

題目傳送門 題解 遍歷一遍真的是太不優美(sb)了 有序數組嘛,閉着眼睛都知道是二分→_→ 找到兩個位置 第一個>=k的位置 第一個>k的位置 AC-Code class Solution { public:

原创 劍指Offer——JZ43.左旋轉字符串

題目傳送門 題解 官方給的題解當 n>str.length()n>str.length()n>str.length() 的時候,就不處理了。 這樣應該是不對的,對於 n>str.length()n>str.length()

原创 劍指Offer——JZ41.和爲S的連續正數序列【滑動窗口】【√N複雜度數學解法】

題目傳送門 題解 暴力直接gun粗 對於連續區間的問題,前綴和滑動窗口都是不錯的方案。 滑動窗口的解法的時間複雜度很顯然是 O(N)O(N)O(N),實際時間複雜的可以常數降低至 O(N2)O(\frac{N}{2})O(

原创 劍指Offer——JZ44.翻轉單詞順序列

題目傳送門 題解 題目沒讓對空格進行額外處理,只是反轉內容。 但是很多題解卻處理了額外的空格,應該是不對的。 如果不要多餘空格,可以使用 stringstreamstringstreamstringstream 類 A

原创 劍指Offer——JZ40.數組中只出現一次的數字【位運算】

題目傳送門 題解 我們知道 aaa ^ a=0a=0a=0 那麼把所有數都異或一遍,得到ret就是 A ^ B的值 A 異或 B的結果,代表了A和B在哪些位上是不一樣的。那麼我們可以隨便找一個ret上爲1的位,在這一位上

原创 劍指Offer——JZ42.和爲S的兩個數字【二分】

題目傳送門 題解 二分答案 對於 a<b<c<d,a+d==b+ca<b<c<d,a+d==b+ca<b<c<d,a+d==b+c 時,一定有 a∗d<b∗ca*d<b*ca∗d<b∗c 所以輸出乘積最小的只是個幌子,第一

原创 NS3教程(下載、安裝、測試)

首先準備兩三個小時以上的時間 安裝Ubuntu Linux安裝自行解決Linux安裝自行解決Linux安裝自行解決 本人環境:Ubuntu版本18.04,建議4G以上空間本人環境:Ubuntu版本18.04,建議4G以上空間本人

原创 劍指Offer——JZ46.孩子們的遊戲(圓圈中最後剩下的數)【遞歸 | 迭代】

題目傳送門 題解 解法一:暴力O(n2)O(n^2)O(n2) 解法二:遞歸 設f[n,m]f[n,m]f[n,m]表示題意所求。則首先明確f[1,m]=0f[1,m]=0f[1,m]=0(一個人肯定就是自己了) 採用自底

原创 劍指Offer——JZ48.不用加減乘除法做加法【二進制】

題目傳送門 題解 在二進制運算中,對於某一位來講: a∧b:表示a+b的本位a \wedge b:表示a+b的本位a∧b:表示a+b的本位 a & b:表示a+b應該進的位a\ \&\ b:表示a+b應該進的位a & b: