原创 劍指offer 13:機器人的運動範圍

此題可用廣度優先搜索(BFS)來解決 需要注意的是threshold有可能爲負數 struct point { int x; int y; point(int a, int b) :x(a), y(b){}; }; clas

原创 c++ sort用法

該函數默認爲由小到大排序,如果要改爲由大到小排序,則需要修改第三個參數。 #include<iostream> #include<vector> #include<algorithm> using namespace std;

原创 劍指offer 59-1:滑動窗口的最大值

採用雙向隊列維護該滑動窗口,若下一個數值大於當前滑動窗口的最大值,則將雙向隊列清空並將新值加入;若不大於滑動窗口的最大值,則將尾部小於新值的元素全部出隊列;若頭部的最大值下標和當前遍歷的下標之差大於k時,將頭部元素出隊列。 /**

原创 最大公共子串

最大公共子串求法與最大公共子序列類似,均可採用動態規劃的思想 if(str1[i]==str2[j]) dp[i][j]=dp[i-1][j-1]+1; else dp[i][j]=0; 代碼如下: /** *Copyri

原创 劍指offer 37:序列化二叉樹

可採用前序遍歷序列化及反序列化二叉樹 /** *Copyright @ 2019 Zhang Peng. All Right Reserved. *Filename: *Author: Zhang Peng *Date:

原创 leetcode 892. Surface Area of 3D Shapes

此題是求立體圖形的表面積 2019年8月16日的360筆試編程題第一題就是該題。 思路:1、如果grid[i][j]大於前、後、左、右位置的值,表面積應該加上與他們各自的差,將超出邊界的值按0對待 2、如果grid[i][j]不等

原创 深度優先遍歷(DFS)

以下以二維平面上的圖來做示例,在所示圖上用深度優先遍歷查找指定起始點和終止點的路徑。 圖中1表示可以走,0表示障礙不可以走 在深度優先遍歷中需要注意的有以下幾點: 遞歸實現深度優先遍歷,注意退出條件 需記錄已訪問和待訪問的位置

原创 劍指offer 57-2:和爲s的連續正數序列

/** *Copyright @ 2019 Zhang Peng. All Right Reserved. *Filename: *Author: Zhang Peng *Date: *Version: *Descri

原创 劍指offer 55-2:平衡二叉樹

此題是判斷是否是平衡二叉樹 遞歸檢查左、右子樹的深度之差是否在1以內,但是在編程時有多種方式,應採用由底向上的方式進行,避免重複進行計算。 /** *Copyright @ 2019 Zhang Peng. All Right R

原创 堆排序

堆實質上可以看作是以完全二叉樹的結構來維護的一維數組 大頂堆:每個結點的值都大於或等於其左、右子結點的值 小頂堆:每個結點的值都小於或等於其左、右子結點的值 利用大頂堆實現由小到大排序代碼如下: /** *Copyright @

原创 劍指offer 41 :數據流中的中位數

如果是奇數,中位數是最中間的那個數,否則是中間兩個數的平均數。 思路一:先對數據進行排序,再求中位數,可是如果是數據流,這樣的方法必須每次擴充數組等,不可行。 思路二:借鑑有序的思想,在前半段維護一個大頂堆,後半段維護一個小頂堆,

原创 矩陣清零

此題爲將矩陣中0所在的行和列所有元素清零 思路一:利用輔助空間記錄所要清零的行和列 思路二:尋找第一個爲0的元素,將其行和列當做記錄清零位置的輔助空間 /** *Copyright @ 2019 Zhang Peng. All

原创 劍指offer 51:數組中的逆序對

可以用歸併排序的思想,在合併兩個字數組時計算下逆序對數目,並加在一起。 class Solution { public: void Merge(vector<int> & data, long long & result, in

原创 劍指offer 40: 最小的k個數

可維護一個長度爲k的最小數組成的multiset,其中的數字就是最小的k個數。 如果需要去重的話採用set,set是集合,所有的數字只出現一次。 class Solution { public: vector<int> G

原创 劍指offer 45 : 把數組排成最小的數

總體思路是將數組中的數字按照一定規則進行排序,最後將其組合成字符串輸出。 排序的規則可以有兩種實現方式: 按位循環比較,外層循環爲長度較長的字符串,比較的下標取外循環下標對較短長度取餘 若mn>nm 則交換m、n 代碼如下: