原创 簡單題-不用庫函數,求解一個數字的平方根

題目: 如標題所示,不用平方根庫函數,求解一個數字的平方根。 分析: 這個問題有兩個思路: 思路1:採用二分的方式(無處不在的二分),上界初始化爲數字本身,下界初始化爲1,這樣用二分,判斷中間數字的平方和目標數字比較,再修改上界和下界,直

原创 判斷一個後序遍歷是否正確

題目: 一棵二叉查找樹,得到一個後序遍歷,判斷這個後序遍歷是否正確。 分析: 方法1,根據中序和後序 根據中序和後序,可以唯一得到一棵二叉樹。一棵二叉查找樹的中序顯然就是所有數字的正常排序,所以,我們首先將所有的後序得到的數字排序,時間複

原创 原地矩陣旋轉

題目: 原地矩陣旋轉,只使用O(1)空間進行旋轉 分析: 假如是一個一維數組,我們很容易進行旋轉,但是對於二維矩陣,沒有好的思路,不過大體思路應該和一維類似,找到網上有人介紹,直接轉載過來,還有點看不明白,但是代碼實現了,作者是正確的。

原创 連續的正數序列,使得和爲指定值

題目: 連續的正數序列,使得和爲指定值 分析: 以前做過類似的題目,求解兩個數字和爲指定值這種題目,採用先排序,然後從兩頭開始查找的方式,這題其實也差不多,採用兩個指針,不過這次兩個指針同時從頭開始查找,初始化時first指針指向1,se

原创 在一維座標軸上有n個區間段,求重合區間最長的兩個區間段。

題目: 在一維座標軸上有n個區間段,求重合區間最長的兩個區間段。 分析: 這題和《編程之美》時間安排的題目類似,可以用隊列來表示,首先按照各個區間的左數字進行排序,然後依次入隊列尾,如果遇到區間的右數,從隊列頭找其對應的左數,如果隊列頭是

原创 高效使用VIM

高效使用vim (Efficient Editing With vim) 原英文教程見 (Original tutorial in English) http://jmcpherson.org/editing.html Abou

原创 尾序列問題

問題: 在《編程珠璣》一書中,提到字符串旋轉問題,比如有字符串ab旋轉得到字符串ba,那麼可以通過(a'b')'得到,其中“ ' ”表示整個字符串旋轉。 在這個問題中,比如"abace"通過在不同位置旋轉,可以得到"eabac","cea

原创 各種字符串匹配算法總結

題目:一種可做特殊用途的字符串匹配算法 http://www.ahcit.com/?p=1965 這篇論文裏面介紹了BF,KMP,ZZL等字符串匹配算法

原创 一致性hash算法 - consistent hashing

目錄(?)[-] 一致性 hash 算法( consistent hashing ) 基本場景hash 算法和單調性consistent hashing 算法的原理 環形hash 空間把對象映射到hash 空間把cache 映射到has

原创 動態數組和vector

網上看到有人寫到動態數組的東西,感覺寫的非常好,就直接轉載過來了,其中有些小錯誤,幫他修改發上來。 --------------------------------------------------------------------

原创 不改變正負數相對順序重新排列數組

看到網上一個解法,空間複雜度O(1),時間複雜度O(nlogn) 做一個小算法題,提提神 一個未排序整數數組,有正負數,重新排列使負數排在正數前面,並且要求不改變原來的正負數之間相對順序。 思考的過程就略去了,直接說結果吧。我想到的算

原创 調整數組順序實現:奇數在偶數前面 以及 “奇偶奇偶”相間

問題: 問題一,需要重新排列數組,使得數組的奇數在前面,偶數在後面; 問題二,使得“奇偶奇偶”相間,時間複雜度爲O(n)。空間複雜度是O(1)。 分析: 第一個問題,馬上想到的就是用兩個指針的方法,一個放在頭,一個放在尾,同時往中間走,不

原创 蓄水池抽樣問題

題目: 微軟電面問到的問題,前面提了一大堆背景,最後歸結爲一個問題,如何在連續的網絡流量中,等概率隨機抽取1個數據包。 分析: 參加電面時,還沒看過蓄水池抽樣問題,後來回來一搜,這就是典型的蓄水池抽樣問題,不過當時自己也想到了一種解法,使

原创 全排列—存在重複元素

問題: 全排列問題,但是存在重複元素,比如babc,求全排列,要求全排列不能包含重複串 分析: 由於存在重複元素,經典的全排列-遞歸方式不能達到題目要求,可以在原有全排列的基礎上加入判斷,還要對所有元素首先進行一次排序,具體代碼如下: #

原创 尋找醜數

題目: 我們稱只包含因子2,3,5的數爲醜數,比如9,但是14不是,因爲包含因子7。我們要求找到前1500個醜數。 分析: 直觀的方法就是窮舉1,2,3...n,每次得到一個數,我們窮舉它的因子2,3,5,窮除這些因子後,數最後只剩1,表