Time of Update: 2018-12-05
轉載自:http://www.cnblogs.com/drizzlecrj/archive/2007/09/14/892340.html很老的東東了,其實也沒啥好整理的,網上很多資料了,就當備用把:-)1. 歐幾裡德演算法和擴充歐幾裡德演算法歐幾裡德演算法 歐幾裡德演算法又稱輾轉相除法,用於計算兩個整數a,b的最大公約數。其計算原理依賴於下面的定理: 定理:gcd(a,b) = gcd(b,a mod b) 證明:a可以表示成a = kb + r,則r = a mod b
Time of Update: 2018-12-05
文章目錄 方法一:非遞迴方法 題目已知兩個有序鏈表,試合并這兩個鏈表,使得合并後的鏈表仍然有序(註:這兩個鏈表沒有公用結點,即不交叉)。分析既然兩個鏈表都是有序的,所以合并它們跟合并兩個有序數組沒有多少區別,只是鏈表操作涉及到指標,不能大意。方法一:非遞迴方法使用2個指標list1和list2分別遍曆兩個鏈表,將較小值結點歸併到結果鏈表中。如果有一個鏈表歸併結束後另一個鏈表還有結點,則把另一個鏈表剩下部分加入到結果鏈表的尾部。代碼如下所示:
Time of Update: 2018-12-05
轉載自http://blog.csdn.net/zhanxinhang,作者:花心龜的扮演者ZhanHang題:求一個矩陣中最大的二維子矩陣(元素和最大).如: 1 2 0 3 4 2 3 4 5 1 1 1 5 3 0 中最大的是: 4 5 5 3 要求:(1)寫出演算法;(2)分析時間複雜度;(3)用C寫出關鍵代碼分析:方法一、這是最容易想到也是最容易實現的方法。
Time of Update: 2018-12-05
面試中常常會要求寫一些基本的庫函數,尤其以字串庫函數考的最多,所以本文匯總了一些常見的字串庫函數的實現。此外,把與記憶體相關的操作函數也匯總到了一起。//求字串長度int strlen(const char *s) {int n = 0;while (*s++ != '\0')n++;return n;}//字串拷貝,返回指標是為了實現鏈式操作,如strlen(strcpy(dst, src)),dst需要保證有足夠空間char *strcpy(char *dst, const char
Time of Update: 2018-12-05
題目給定一棵二叉搜尋樹(BST),找出樹中兩個結點的最低公用祖先結點(LCA)。二叉搜尋樹結點定義: struct node { int data; struct node* left; struct node* right; }; 如為一棵BST,結點2和8的LCA是6,結點4和2的LCA是2。注意,與文章二叉樹兩結點的最低公用祖先結點 中不同,這裡已經說明是二叉搜尋樹(BST),所以可以利用BST的性質進行處理更加簡單。
Time of Update: 2018-12-05
問題在前面的文章二叉樹兩結點最低公用祖先結點(一) 中有探討過這個問題,不過本文考慮的是另外一種二叉樹,該二叉樹每個結點包含一個指向父結點的指標,根結點的父結點為NULL。其結構如下: struct node { int data; struct node* left; struct node* right; struct node* parent; };
Time of Update: 2018-12-05
文章目錄 1)插入排序 2)希爾排序 3)選擇排序 4)冒泡排序 5)計數排序 6)基數排序 7)歸併排序
Time of Update: 2018-12-05
二叉樹的遍曆演算法有多種,典型的有先序遍曆、中序遍曆、後序遍曆以及層序遍曆。而且這些遍曆的遞迴演算法較為簡單,代碼很少,容易實現,本文就是匯總二叉樹遍曆的遞迴演算法,非遞迴演算法將在下一篇文章中進行總結。本文中用到的二叉樹執行個體如下: 3 / \ 9 20 / \ 15 7二叉樹定義和輔助函數如下:struct node { int data; struct node* left; struct node*
Time of Update: 2018-12-05
題目描述給定一棵二叉排序樹(BST),將該樹轉換成一棵雙向迴圈鏈表。請看下面的圖示說明,你可以更清楚的瞭解題意。BST的結構定義如下:struct node { int data; struct node* left; struct node* right;};typedef struct node Node; 圖1)一棵儲存1-5的二叉搜尋樹(BST)
Time of Update: 2018-12-05
題目:寫一個程式,找出前N個素數。比如N為100,則找出前100個素數。分析最基本的想法就是對1到N得每個數進行判斷,如果是素數則輸出。一種改進的方法是不需要對1到N所有的數都進行判斷,因為偶數肯定不是素數,而奇數可能是素數,可能不是。2,3,5都是素數,這可以直接得到。然後我們可以跳過2與3的倍數,即對於6n,6n+1, 6n+2, 6n+3, 6n+4,
Time of Update: 2018-12-05
隨機演算法涉及大量機率論知識,有時候難得去仔細看推導過程,當然能夠完全瞭解推導的過程自然是有好處的,如果不瞭解推導過程,至少記住結論也是必要的。本文總結最常見的一些隨機演算法的題目,也當作面試的準備工作吧。需要說明的是,這裡用到的隨機函數都假定它能隨機的產生範圍[a,b]內的整數,即產生每個整數的機率相等。(雖然在實際中並不一定能實現,不過,誰在乎呢?這個世界都是這麼隨機)一、隨機排列數組假設給定一個數組A,它包含元素1到N,我們的目標是構造這個數組的一個隨機排列。一個常用的方法是為數組每個元素
Time of Update: 2018-12-05
題目描述:用1元,2元,5元,10元,20元和50元的紙幣組成100元,共有多少種情況。 要求輸出總方案數和每種方案中各紙幣的個數。 ////////////////////////////4562種 代碼:背包解法: #include <iostream>using namespace std;#define N 6int w[N];int number_used[N];//bool is_used[N];int countnum=0;void init(){ w[0] =
Time of Update: 2018-12-05
文章目錄 問題描述基本思路最佳化空間複雜度初始化的細節問題問題描述轉換為0-1背包問題進一步最佳化—O(CN)解法 本文主要來源於《背包問題九講》,我主要選擇了比較簡單的0-1背包問題和完全背包問題進行匯總,並加入了python代碼實現,剛重裝系統,手頭沒有C編譯器,汗。一、背包問題概述
Time of Update: 2018-12-05
最近幾天一直做nginx的負載平衡,折騰了好幾天,在網上查了很多資料,發現大多數資料都些的很籠統,或者就是些的讓新手迷迷糊糊,似懂非懂,很多的配置參數等都不是很明白,配置的時候也就造成很多地方不確切。現在我對我這幾天的配置予以總結,從下載到安裝,到環境的搭建,以及負載平衡的配置,參數的詳細解釋,以及後面的session共用,都會一一介紹,希望給予對nginx有興趣的特別是新手有一些協助。本文參考了:http://wiki.nginx.org/NginxChsHttpGzipModulengx_h
Time of Update: 2018-12-05
文章目錄 1)漢諾塔問題2)求二叉樹的深度3)判斷二叉樹是否平衡4)排列演算法5)組合演算法
Time of Update: 2018-12-05
Apache2.2 configure 參數詳解 收藏 `configure’ configures this package to adapt to many kinds of systems.`configure’ 配置這個包來適合多數系統.Usage: ./configure [OPTION]… [VAR=VALUE]…文法: ./configure [選項]… [變數=值]…Toassign environment variables (e.g.,
Time of Update: 2018-12-05
組合演算法題往往有多個變種,如求一個集合的全部子集以及部分組合問題,這篇文章對這些常見的面試題做個匯總,權當做個記錄,以免自己哪天忘了,難得到網路上去找。一、求一個集合的全部子集題目:給定一個集合s={a, b, c, d},試給出一個演算法輸出該集合的除了空集之外的全部子集。分析:我們知道,一個集合的子集數目跟它的元素數目有關,集合元素數目為n,則子集數目為2^n。如包含兩個元素的集合s1 = {a, b},則它的子集有:空集、{a}、{b}、{a,
Time of Update: 2018-12-05
題目描述給定一個整數N,那麼N的階乘N!末尾有多少個0呢?(該題取自《編程之美》)分析求解如果N!= K*10^M,且K不能被10整除,則N!末尾有M個0。考慮N!可以進行質因數分解,N!= (2^X) * (3^Y) * (5^Z)..., 則由於10 = 2*5,所以0的個數只與X和Z相關,每一對2和5相乘得到一個10,所以0的個數M=min(X, Z),顯然2出現的數目比5要多,所以0的個數就是5出現的個數。由此可以寫出如下代碼:int numOfzero(int N){ int
Time of Update: 2018-12-05
從阮一峰的部落格上看到的,Calaméo 是一個優秀的Web2.0服務,可以將你的檔案發布成電子書,讓其他使用者直接線上上觀看,同時你也可以瀏覽其他人建立的電子書。閱讀畫面精美、支援的檔桉類型相當多,翻頁極為順暢。Calaméo 支援的檔桉類型包括 pdf, doc, ppt, pps, txt 等等。1、相關產品google docs:google docs的定位還是線上的文檔工具,解決多台電腦間,辦公室和家裡,以及和其他人分享文檔的需求,但是更多的偏於前者,和微軟Office辦公軟體類似。
Time of Update: 2018-12-05
涉及位元位操作的演算法題有很多,本文對其中常見的一些進行匯總,所有資源來自網路。一、判斷一個正整數是否是2的整數次冪判斷一個整數N是否是2的整數次冪,這是個很常見的問題。比如4、8等都是2的整數次冪,而6不是。解法1)一個基本的解法是設定i=1開始,迴圈乘以2直到i>=n,然後判斷i是否等於n即可。解法2)當然還有一個更好的方法,那就是觀察一個數位二進位表示,如n=101000,則我們可以發現n-1=100111。也就是說n=>n-1是將n最右邊的1變成了0,同時將n最右邊的1右邊的