原创 回溯——迷宮問題

問題描述:用一個N 階矩陣來表示一個迷宮,該矩陣包含元素 0 1 -2 -3分別表示通道、牆、入口、出口。從入口處開始沿着通道行經,判斷是否能夠到達出口。 思路分析:問題的關鍵包括以下幾個部分 建立迷宮包括牆、通道、入口、出口

原创 回溯/遞歸——八皇后

問題描述:在8X8的棋盤上放置八個皇后,任意兩個皇后都不能處於同一行、列或者同一斜線上。 分析:每行只能放一個,每列只能放一個。 回溯 如何判段在當前位置是否可以防止皇后 行和列的判斷很簡單,主要是對角線的判斷 在 / 對角線上的

原创 虛函數表!!!!

通過虛函數可以實現多態,即通過指針可以找到對象的虛函數,這是因爲創建對象的時候增加了虛函數表。 ps:當對象中有虛函數時,內存中存的第一個數據是一個指向虛函數表的地址。(當計算對象大小時需要注意含不含虛函數)另外如果一個類中什麼都

原创 最小生成樹——普里姆算法(Prim算法)

普里姆算法: 普里姆算法在找最小生成樹時,將頂點分爲兩類,一類是在查找的過程中已經包含在樹中的(假設爲 A 類),剩下的是另一類(假設爲 B 類)。 對於給定的連通網,起始狀態全部頂點都歸爲 B 類。在找最小生成樹時,選定任意一個

原创 一個數的N次冪

問題:求解X^Y,XY都爲整數,且Y非負。要求時間複雜度小於O(N) 常規算法O(N) for循環從0到Y-1每次都累乘X得到結果,複雜度顯然爲n 歸併 將X^Y問題進行劃分,等價於: Y爲偶數時 X^(Y/2) * X^(

原创 最小生成樹——克魯斯卡爾算法(Kruskal算法)

克魯斯卡爾算法(Kruskal算法) 對於n個頂點的連通圖而言,其生成的最小生成樹有n-1條邊,即可以保證從任一點出發可以到達任一點且不產生迴路。 克魯斯卡爾算法(Kruskal算法):對每條邊的權值進行從小到大排序,然後從小到大

原创 矩陣的n次冪

問題: 給定任一矩陣,求其n次冪,複雜度小於O(n) 提示:矩陣相乘,用左邊的行乘以右邊的列 再分析這個問題前,先思考如何對矩陣進行乘操作,爲了使問題更具普遍性,我們來分析行列式相乘的問題 用(x1,y1)的行列式乘以(x2,y2

原创 數組以n分爲大於小於n的左右兩部分

給定一個數組arr,和一個數num,請把小於等於num的數放在數 組的左邊,大於num的數放在數組的右邊。 要求額外空間複雜度O(1),時間複雜度O(N) 思路:兩個指針 void part_num(int arr[], int

原创 特殊的棧

實現一個特殊的棧,在實現棧的基本功能的基礎上,再實現返 回棧中最小元素的操作。 【要求】 1.pop、push、getMin操作的時間複雜度都是O(1)。 2.設計的棧類型可以使用現成的棧結構。 思路:用兩個棧,左邊棧正常存儲,右

原创 用遞歸和棧的操作函數實現棧的逆序

用遞歸和棧的操作函數實現棧的逆序,要求不能使用額外的輔助空間。 int getandremovelastnum(stack<int>&s){ //得到並刪除棧底的元素 int ret = s.top(); s.pop();

原创 ip和dns命令

IP IP地址:32位二進制 X.X.X.X 十進制範圍0~255 例如:300.213.0.0不合法 主機位不能全部爲255或0 例:255.255.255.255不合法 0.0.0.0不合法 255.0.0.0合法 127.

原创 01矩陣中最大子矩陣

問題:一個矩陣只含有0 1兩種元素,求只包含1的最大子矩陣大小(大小用包含的1的個數表示) 假設矩陣大小爲N x M, 要求時間複雜度爲O(N x M) 例如給定如下矩陣: 1 0 1 0 0 1 0 1 1 1 1 1 1 1

原创 直方圖最大矩陣面積

題目 給定一個直方圖,求這個直方圖中最大矩陣對應的面積是多少? 比如有個圖如下 (對應的數組爲:[2,1,5,6,2,3]) 那麼對應的最大矩形的面積應該爲 10: 解 使用單調棧可以使時間複雜度爲O(N) 分別以數組中的每個

原创 生成最大窗口數組

題目: 有一個整型數組 arr 和一個大小爲 w 的窗口從數組的最左邊滑倒最右邊,窗口每次向右邊劃一個位置。 例如: 數組爲 [4,3,5,4,3,3,6,7],窗口大小爲3時: [4 3 5] 4 3 3 6 7 窗口的最大值爲

原创 拓撲排序

針對的是有向無環圖,且一定要爲有向無環圖,總體思路爲: 找到入度爲0的點 從圖中去除以改點爲弧尾的弧,循環到步驟1.