原创 C風格字符串基本操作

與字符串相關的基本操作包括strlen, strcpy, strcat, strcmp, strchr, strspn, strcspn, strpbrk, strstr, strtok等。在有些平臺上,strcpy等使用較多的操作可能直

原创 二叉查找樹轉變爲排序的雙向鏈表

問題:對於輸入的一棵二叉查找樹,將該二叉查找樹轉換成一個排序的雙向鏈表,要求不能創建任何新的結點,只調整指針的指向來達到目的。 目測這個問題不難解決,應該可以在O(n)的時間複雜度內解決。對於一個二叉查找樹,轉換爲一個從小到大排序的鏈表,

原创 Linux如何知道當前進程的ID

在應用程序中可以通過getpid這個系統調用來獲得當前進程的pid,在內核中可以通過current來獲取當前進程的相關信息。而getpid這個系統調用實際上在內核中也是通過current來獲取進程pid的,那麼current是怎麼來的呢?

原创 單鏈表有環求長度及相交問題

單鏈表的節點只有一個指針指向下一個節點,兩個單鏈表相交的話就會導致兩個單鏈表的尾節點是相同的,所以只需要比較尾節點是否相同就可以知道兩個單鏈表是否相交。但是,這樣是否就完全沒有問題了呢? 環! 其實不然,單鏈表有可能沒有尾節點!爲什麼?因

原创 阿拉伯數字轉換爲中文數字

有次在百度的面試中遇到了這個問題,當時做的比較挫,現在仔細想了一下然後寫了這樣的一段代碼。我是按照人對數字的分析來寫的這段代碼。 首先,如果在數字中有小數部分,那麼直接從末尾開始將小數部分的每一位轉換爲中文,即代碼20-28行所示,最後需

原创 常量時間的隊列操作(min/max)

要想實現帶有min,max常量時間操作的隊列,不能直接通過增加額外的空間來實現,但是可以通過使用帶有min,max常量時間操作的兩個棧來實現! 棧1用於接受加入隊列的數據,push操作時總是會把數據壓入棧1,pop時總是彈出棧2,如果棧2

原创 常量時間的棧操作(min/max)

push,pop,top,size,empty這些操作對於棧來說常量時間的,但是要想實現min,max的常量時間操作需要增加兩個棧,一個用於維護最小值,一個用於維護最大值。例如,對於min,每次入棧時將小於等於min棧頂的數值也壓到min

原创 數獨求解

數獨是一個很經典的問題,由於數獨的規模很小,暴力破解數獨也是一個很不錯的方法!我就是採用暴力破解的辦法去尋找數獨的解,在求解的過程中按照人類的思維大大減少了搜索路徑的數量! 我設置了一個標記,flag用於標記某一行、某一列以及某一塊是否已

原创 幾個字符串匹配算法

字符串匹配算法是一種應用很廣泛的算法,在入侵檢測、關鍵詞匹配等技術中都需要使用到。我專門研究了幾個字符串匹配算法,如果想了解更多更全的算法可以去看《柔性字符串匹配》這本書。 下面依次來說說樸素算法,Rabin-Karp算法,Knuth-M

原创 找出二叉樹中和爲某值的所有路徑

問題是這樣的,在一棵以root爲根的樹中,找出以root爲起點的所有路徑,要求路徑中節點的值相加等於給定的數值。這個問題很簡單,甚至於想都不用想就知道遍歷樹一遍就可以解決。 找出符合要求的路徑,其實就是下面這個遞歸表達式: 1.求出以ro

原创 和爲指定值的連續序列

輸入一個整數s,打印出所有和爲s的連續正整數序列(至少包含兩個數)。例如,對於輸入15,由於有1+2+3+4+5=15,4+5+6=15,7+8=15,所以打印出1~5、4~6、7~8三個序列。 有個比較好的做法是利用等差數列求和公式:

原创 填充Z形二維數組

形如  1   3 4 10  2  5 9 11  6  8 12 15  7 13 14 16 的數組稱謂Z形二維數組。填充這樣的數組其實只要按照Z形進行行走填充即可,設置一個flag指示方向,行走的時候檢測邊界,遇到邊界便轉換方

原创 妹紙小A的計數工作

文中所述事情均是YY。 小A是一個呆萌的妹紙,最近剛剛加入小B的團隊,這幾天小B交給她一個任務,讓她每天統計一下團隊裏九點半之前到公司的人數。 九點半之前到公司人數 於是,每天早上小A都早早來到公司,然後拿一個本子來記,來一個人就記

原创 Java註解成員支持的類型

在Java中,註解的成員類型是有限的,例如下面的示例: @Documented @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.ANNOTATION_TYPE) public

原创 尋找發帖“水王”

在編程之美中有《尋找發帖“水王”》這麼一題,這題書上提供了一個比較好的解法。對於某個元素超過總數N的1/M這類問題有一個通用的方法來解決。試看這樣的操作:每次取出M個不同的元素,然後求解餘下元素中超過總數1/M的元素。最終將能剩下M-1個