第一個問題,查找出1000萬數據中最大的100萬條。算法
對這個問題的第一反應就是利用排序算法,排序有不少種。其中以快排用的最多。只需屢次paration獲得前100萬便可。數組
還有一種思路就是創建一個100萬大小的堆,而後再不斷的對進來的數據進行堆調整。當查找出的數據越小的時候,優點會特別明顯。好比100萬變成100的時候,用堆將是最好選擇。dom
第二個問題,對最大數爲1000萬的100萬條數據進行排序,且數據無重複。ide
這個其實也能夠用堆排序,快速排序進行處理。可是還能夠用位圖的方式進行處理。位圖的時間複雜度是N,快於他們,只不過須要開闢100萬/8個字節而已。spa
若是把題目改爲,999999(100萬-1)條數據中是由1-100萬組成,且無重複,查找出那個缺失的數據。用位圖的優點將會越加體現。比其餘排序方法好不少。code
第三個問題,100萬+1條數據中都是兩兩重複的,只有一條是單着的。blog
固然,咱們能夠用排序。可是用這些數據所有與&,會快不少。因此位操做有時候很重要。排序
第四個問題,查找一本書中是否存在某個單詞。字符串
這個問題,能夠有不少種查找方式,好比說排序,經過基排序的方式,而後二分查找,這個很好,可是感受效率仍是不是很高。get
或者用hash對書中全部單詞進行hash,再比較。
我認爲最好的方式是創建字典樹tire,這個很快很快。
第五個問題,隨機產生1--N中M個數。
若是能夠產生重複的數,那麼很簡單,直接rand(N) m次便可。可是若是不可重複呢?
1,利用隨機的思想,開一個N大的數組,而後for i=1...M;每次產生一個隨機數k,若是k>i,交換數組中的數,不然不交換,重複M次。
2,利用機率的思想,第一個數在M個數裏面的機率是m/N,則隨機產生一個數k,(1...N)若是k小於m,則添加到m裏面,同時m=m-1,對第二個數2,進行處理,此時2添加到數組中的機率應該是(m)/N-1....後面同理
原本不想粘貼代碼,仍是粘一下吧「
1 public static void getM(int n,int m){//等機率的取出其中m個數
2 for(int i=0;i<n;i++){ 3 Random random=new Random(); 4 int k=random.nextInt(10000); 5
6 if(m>0&&k%(n-i)<m){ 7 System.out.print(":"+i+" "); 8 m--; 9 if (m==0) { 10 break; 11 } 12 } 13 } 14 }
第六個問題,對於兩個字符串,如何獲得其中相同的子串呢?(不是子序列)子序列可不連續,可是子串必須連續。
第一反應用動態規劃的思想求解。(暴力法時間複雜度過高)
第二,能夠經過創建後綴數組的方式求解,後綴數組,排序。比較,獲得答案。複雜度要比動態規劃好。只不過是空間換時間罷了。代碼就不貼了。
第七個問題,一堆單詞集合M,一個字符串S。求出S能夠在M中找到多少個單詞。好比M={good,thank, you,are,do},S="goodoayouk".能到找到的單詞是good,do,you.三個。
能夠暴力法,硬匹配;
一種比較好的方法應該是利用AC自動機搜索。這個挺好,快!
第八個問題,求一個字符串中是否包含另一個子串。
BF暴力法能夠解決,動態規劃也能夠解決。複雜度都是平方級的。
其實能夠用KMP來解決,他的複雜度下降了,只不過要建一個next數組。用來保存主串的內在聯繫。到時候減小匹配次數。
貼個代碼吧。沒有check,可能有bug.
1 int KMP(char S[],char des[],int* next){ 2 int i=0,j=0; 3 while (i<strlen(S)&&j<strlen(des)) 4 { 5 if (j==-1||S[i]==des[j]) 6 { 7 i++;j++; 8 }else{ 9 j=next[j]; 10 } 11 } 12 if (j>=strlen(des)) 13 { 14 return i-strlen(des); 15 } 16 else return 0; 17 } 18 void getNext(char S[],int* next){ 19 int i=0,j=-1; 20 next[0]=-1; 21 while(i<strlen(S)){ 22 if (j==-1||S[i]==S[j]) 23 { 24 i++,j++; 25 next[i]=j; 26 }else{ 27 j=next[j]; 28 } 29 } 30 }
(本文只用做本身總結,故沒有展開來講,相關細節能夠搜索其餘文章,排版也不是個人長項,因此你們將就吧。)
未完待續。。。
版權全部,歡迎轉載,可是轉載請註明出處:瀟一