原创 Trie樹的基本操作

#include <iostream> #include <cstdlib> #include <stdio.h> #define MAX 26 using namespace std; typedef struct TrieNode{

原创 旋轉數組中的最小元素

題目:把一個數組最開始的若干個元素搬到數組的末尾,我們稱之爲數組的旋轉。輸入一個排好序的數組的一個旋轉,輸出旋轉數組的最小元素。例如數組{3, 4, 5, 1, 2}爲{1, 2, 3, 4, 5}的一個旋轉,該數組的最小值爲1。 分析:

原创 【hdu1213】How Many Tables【並查集】

Problem Description Today is Ignatius' birthday. He invites a lot of friends. Now it's dinner time. Ignatius wants to k

原创 字符串移動(字符串爲*號和26個字母的任意組合,把*號都移動到最左側,把字母移到最右側並保持相對順序不變),要求時間和空間複雜度最小 .

#include <iostream> #include <string.h> using namespace std; char* MoveStar(char s[]) { if(!s) return NULL; int Star

原创 找出數組中兩個只出現一次的數字

題目:一個整型數組裏除了兩個數字之外,其他的數字都出現了兩次。請寫程序找出這兩個只出現一次的數字。要求時間複雜度是O(n),空間複雜度是O(1)。 #include <iostream> using namespace std; voi

原创 【hdu1232】暢通工程【並查集】

Problem Description 某省調查城鎮交通狀況,得到現有城鎮道路統計表,表中列出了每條道路直接連通的城鎮。省政府“暢通工程”的目標是使全省任何兩個城鎮間都可以實現交通(但不一定有直接的道路相連,只要互相間接通過道路可達即可)

原创 解決android模擬器上不了網問題

新建的模擬器2.2版本不能上網,解決如下: 1.運行模擬器(可以在開發環境ECLIPSE直接RUN或通過exe運行); 2. 模擬器運行後,打開命令提示符cmd,定位到tools目錄下,進入adb shell ,設置net.dns1爲電腦

原创 顛倒棧

題目:用遞歸顛倒一個棧。例如輸入棧{1, 2, 3, 4, 5},1在棧頂。顛倒之後的棧爲{5, 4, 3, 2, 1},5處在棧頂。 分析:乍一看到這道題目,第一反應是把棧裏的所有元素逐一pop出來,放到一個數組裏,然後在數組裏顛倒所

原创 刪除字符串開始及末尾的空白符,並且把數組中間的多個空格(如果有)符轉化爲1個。

#include <stdlib.h> #include <stdio.h> #include <string.h> void DelSpace(char s[]) { char *p=s; int FlagOfFront=1;

原创 【POJ1330】最近公共祖先(LCA):並查集+深搜

最近公共祖先(LCA)問題常見於各種面試題中,針對不同情況算法也不盡相同。 情況1:二叉樹是個二叉查找樹,且root和兩個節點的值(a, b)已知。 如果該二叉樹是二叉查找樹,那麼求解LCA十分簡單。 基本思想爲:從樹根開始,該節點的值爲

原创 出現次數超過一半的數字

題目:數組中有一個數字出現的次數超過了數組長度的一半,找出這個數字。             詳見《編程之美》的2.3尋找發帖水王。 #include <iostream> using namespace std; int Find(i

原创 從第一個字符串中刪除第二個字符串中的所有字符

例如,輸入”They are students.”和”aeiou”,則刪除之後的第一個字符串變成”Thy r stdnts.”。 思路:不可避免的是遍歷第一個字符串,如果遍歷一個字符,都需要去第二個字符串中查找其存不存在,那麼複雜度會是O

原创 最長單調遞減子序列

方法一:普通動態規劃算法,時間複雜度O(n2)。 int LIS(int a[], int n) { int i, j, k; int maxlen; int *b=new int[n]; for(i=0, b[0]=1; i<n

原创 n個骰子的點數

題目:把n個骰子扔在地上,所有骰子朝上一面的點數之和爲S。輸入n,打印出S的所有可能的值出現的概率。 分析:骰子一共6個面,每個面上都有一個點數,對應的數字是1到 6之間的一個數字。所以,n個骰子的點數和的最小值爲n,最大值爲6n。因此,

原创 撲克牌的順子

題目:從撲克牌中隨機抽5張牌,判斷是不是一個順子,即這5張牌是不是連續的。2-10爲數字本身,A爲1,J爲11,Q爲12,K爲13,而大小王可以看成任意數字。   我們需要把撲克牌的背景抽象成計算機語言。不難想象,我們可以把5張牌看成由5