原创 微軟,Google面試題 (28) —— 字符串的排列

題目:輸入一個字符串,打印出該字符串中字符的所有排列。例如輸入字符串abc,則輸出由字符a、b、c所能排列出來的所有字符串abc、acb、bac、bca、cab和cba。和http://blog.csdn.net/jiangyi711/a

原创 微軟,Google面試題 (14) —— 約瑟夫環

題目:n個數字(0,1,…,n-1)形成一個圓圈,從數字0開始,每次從這個圓圈中刪除第m個數字(第一個爲當前數字本身,第二個爲當前數字的下一個數字)。當一個數字刪除後,從被刪除數字的下一個繼續刪除第m個數字。求出在這個圓圈中剩下的最後一個

原创 微軟,Google面試題 (18) —— 用兩個棧實現一個隊列

解法:有兩個棧A和B。隊列的appendTail操作爲,將元素push進A。隊列的deleteHead操作爲:如果B不爲空,則pop棧B的棧頂元素。如果B爲空,則將A中的元素全部依次pop到B,然後pop棧B的棧頂元素。擴展問題:如何用兩

原创 《編程之美》:整數的二進制表示中1的個數

題目:輸入一個整數,求該整數的二進制表達中有多少個1。例如輸入10,由於其二進制表示爲1010,有兩個1,因此輸出2。解法一:循環移位。每次移位都與1進行與運算,如果結果爲1,則該位爲1。這種方法的複雜度爲O(k),k爲該數的二進制位數。

原创 微軟,Google面試題 (17) —— 字符串轉換成整數

要注意以下幾點: 一,通過一個全局變量標記傳入的指針是否爲NULL或者是否含有非法字符或者是否造成int溢出。二,需要判斷是否以+號或者-號開頭。三,在函數內部用long long保存結果,如果有溢出,則結果爲0。四,最後,用static

原创 微軟,Google面試題 (10) —— 在排序數組中尋找兩個數的和等於給定數

題目:輸入一個已經按升序排序過的數組和一個數字,在數組中查找兩個數,使得它們的和正好是輸入的那個數字。要求時間複雜度是O(n)。如果有多對數字的和等於輸入的數字,輸出任意一對即可。例如輸入數組1、2、4、7、11、15和數字15。由於4

原创 KMP算法

根據matrix67博客上的思路,自己實現的kmp算法,字符串下標從0開始。 博文地址 : http://www.matrix67.com/blog/archives/115 #include <cstdio> #include <cs

原创 幾個集合算法

<STL源碼剖析>上有相應的詳細算法,我這裏只寫出了適用於普通指針的算法,思路和書上的一樣。1. 交集 void set_intersection(int a[], size_t al, int b[], size_t bl) { si

原创 POJ 1258 : 最小生成樹(Prim)

Description Farmer John has been elected mayor of his town! One of his campaign promises was to bring internet connect

原创 linux內核sk_buff的結構分析

轉載自:http://simohayha.javaeye.com/blog/556168我看的內核版本是2.6.32. 在內核中sk_buff表示一個網絡數據包,它是一個雙向鏈表,而鏈表頭就是sk_buff_head。在老的內核裏面sk_

原创 Range Minimum Query (RMQ)

解法一:Sparse Table (ST) algorithm對2k 的長度的子數組進行動態規劃。我們將使用數組M[0, N-1][0, logN]進行保存,其中M[i][j]是以i 開始,長度爲 2j的子數組的最小值的索引。一旦我們預處

原创 POJ 2485 : 最小生成樹(kruskal+並查集)

Description The island nation of Flatopia is perfectly flat. Unfortunately, Flatopia has no public highways. So the tr

原创 STL中的內存分配器

題記:內存管理一直是C/C++程序的紅燈區。關於內存管理的話題,大致有兩類側重點,一類是內存的正確使用,例如C++中new和delete應該成對出現,用RAII技巧管理內存資源,auto_ptr等方面,很多C/C++書籍中都使用技巧的介

原创 非遞歸遍歷二叉樹

// // 非遞歸中序遍歷二叉樹 // void InOrder(struct Node* root) { if (root == NULL) return; struct Node *t = root; stack<struc

原创 STL 中幾個簡單的數值算法實現

複習《STL源碼剖析》,先把幾個簡單的算法自己實現一下。參數沒有用迭代器,直接用整型數組。#include <cstdlib> #include <cstdio> /* 應用於有序區間,判斷 b 中的元素是否全部被 a 包含。默認爲