原创 鏈表相鄰元素翻轉

鏈表相鄰元素翻轉,如a->b->c->d->e->f-g,翻轉後變爲:b->a->d->c->f->e->g  解:三個指針,p和q兩個節點作爲一組處理,pre用於鏈接不同組的節點。 #include <iostream> #includ

原创 【並查集】判斷是否爲樹

【問題描述】 樹是一種大家都不陌生的數據結構,它有可能是一顆空樹或是一些滿足要求的節點連接而成的有向邊的集合。 一棵樹只有一個根節點,根節點沒有指向它的邊。 除了根節點的每一個節點都只有一條邊指向它。 出現環的圖都不是樹。 對一些節點連接

原创 【百度2012年10月20日筆試】1.一個數被3除餘2,被5除餘3,被7除餘2,求滿足條件的前N個數。

用“迭代法”求解(通用的解法) 1)從“最大的除數7”開始思考:假設要求的這個數設爲N=7a+2,(a=1,2,3……) 2)考慮其餘的條件:被3除餘2。即: 3│7a+2-2, 整理得:3│a,即:a=3b,(b=1,2,3…

原创 【2013年06月26日】趨勢科技夏令營面試

中午10點鐘進去的,面試官是個很和藹的技術男,先說我簡歷上的自我評價怎麼這麼少的字,然後和我討論了畢業論文,技術問題主要了以下幾個: (1)堆和棧的區別; (2)進程和線程的區別,爲什麼要提出線程的概念; (3)TCP三次握手過程,爲什麼

原创 會場安排問題

【問題描述】 假設要在足夠多的會場裏安排一批活動,並希望使用儘可能少的會場。(這個問題實際上是著名的圖着色問題。若將每一個活動作爲圖的一個頂點,不相容活動間用邊相連。使相鄰頂點有不同顏色的最小着色數,相應於要找的最小會場數。) 【數據輸入

原创 【設計模式】觀察者模式

觀察者模式:定義對象間的一種一對多的依賴關係,使得每當一個對象改變狀態時,則其他相關依賴對象皆得到通知並被自動更新。 實現一:被觀察者需要有添加和刪除觀察者的功能,當被觀察者狀態變化時,調用其觀察者的更新函數。 貓和老鼠 using Sy

原创 【貪心】刪數問題

【問題描述】 給定n位整數q,去掉其中任意k<=n個數字後,剩下的數字按原次序排列組成一個新的正整數。對於給定的n位正整數a和正整數k,設計一個算法找出剩下數字組成的新數最小的刪數方案。 比如,178543刪除四個數字後,最小的新數是13

原创 【回溯法】實現給定二進制位數的所有組合

#include <iostream> using namespace std; #define N 4 int *x=new int[N]; void backtrack(int t) { int i=0; if(t>N-1)

原创 【貪心】活動安排問題

    活動安排問題就是要在所給的活動集合中選出最大的相容活動子集合,是可以用貪心算法有效求解的很好例子。該問題要求高效地安排一系列爭用某一公共資源的活動。貪心算法提供了一個簡單、漂亮的方法使得儘可能多的活動能兼容地使用公共資源。    

原创 【百度2012年10月20日筆試】2.求字符串中連續重複字母的最大重複次數, 如: aabbbbcadd 的最大字母重複次數爲 4, 有四個連續的b. 要求用遞歸實現.

#include <iostream> using namespace std; int CountLengest(char* pBuf) { int result=0; char *p=pBuf; if(*pBuf=='\0')

原创 大數相乘

利用字符串處理大數 #include <iostream> #include <string.h> using namespace std; void multiply(const char* a, const char* b) {

原创 【設計模式】組合模式

定義:將對象組合成樹形結構以表示“部分-整體”的層次結構。組合模式使得用戶對單個對象和組合對象的使用具有一致性。 範例一: using System; using System.Collections.Generic; using Sys

原创 N!末尾0的個數

參考編程之美2.2不要被階乘嚇倒 N!末尾0的個數,即等於因子10的個數,又10=2*5,所以N!末尾0的個數即因子5的個數(因爲能被2整除的數出現的頻率比能被5整除的數高得多)。 #include <iostream> using na

原创 洗牌算法:隨機打亂一個數組的順序

給定一個數組,要求把數組內元素的順序隨機打亂,然後輸出,主要是要保證效率。 這其實是個洗牌算法,首先從所有元素中隨機選取一個與第一個元素進行交換,然後在第二個之後選擇一個元素與第二個交換,直到最後一個元素。這樣能確保每個元素在每個位置的概

原创 【設計模式】備忘錄模式

定義:在不破壞封裝的前提下,捕獲並且保存一個對象的內部狀態,這樣可以將對象恢復到原先保存的狀態。正如很多軟件中,按Ctrl-Z會取消最後一次用戶操作,即撤銷(Undo)操作。 一般情況下,備忘錄模式有三個類: Memento:備忘錄;