2014百度武漢站研發題

2021-06-18 13:41:20 字數 1525 閱讀 1887

1、給定任意乙個整整數、求比這個數大且最小的不重複數、就是想領兩位不同,例如1231

演算法思路

1.  將給定的long數加1。

2.  從這個數開始檢測是否為重複數,如果不是,ok,這個數就是最終結果。如果是,那麼從數的右側開始找第1對重複的數,然後將其加1,得到乙個新的數

3 .  然後用這個數再從第2步開始

4 雖然把每一對重複的數都變成了不重複的,但仍然不是最小的數,需要將當前重複數後面的數變成最小的,例如,99561將99變成不重複的數,也就是100,原來的數變成了100531,但100531還需要繼續變成100101,再查詢重複數,把到了00,再變成101101,然後再變成101010

2、長度為n字串、求字串裡最長回文子串

演算法思路:

1 先在每兩個相鄰字元中間插入乙個分隔符,當然這個分隔符要在原串中沒有出現過。一般可以用『#』分隔。這樣就非常巧妙的將奇數長度回文串與偶數長度回文串統一起來考慮了

2 然後用乙個輔助陣列p記錄以每個字元為中心的最長回文串的資訊。p[id]記錄的是以字元str[id]為中心的最長回文串,當以str[id]為第乙個字元,這個最長回文串向右延伸了p[id]個字元。

3 從前往後掃的。那麼當我們準備求p[i]的時候,i以前的p[j]我們是已經得到了的。我們用mx記在i之前的回文串中,延伸至最右端的位置。同時用id這個變數記下取得這個最優mx時的id值

4 如果 mx > i p[i] =min( p[2*id-i], mx-i );  // 根據回文的性質,但是如果超過了mx-i 那一部分還沒有比較過,所以取最小值

否者:p[i]=1

然後對後半部分進行遍歷比較 for(; str[i+p[i]] == str[i-p[i]]; p[i]++) 跟新 mx  和 i 的值 然後迴圈

最後對陣列p遍歷即可求出最大值

3、數軸上從左到右有n個點、a0    a1……、給定一根長度為l繩子、求繩子最多覆蓋其中幾個點

陣列題演算法描述:

maxcover=1 ,  covernum = 0 ,beginpos=0,endpos=1 分別表示最多覆蓋點數,當前遍歷開始節點和結束點

1 如果a[endpos] – a[beginpos]== l 這個是時候正好覆蓋covernum = endpos–beginpos + 1; 右移動beginpos++;endpos++;

2 如果a[endpos] – a[beginpos]> l 這個時候超過了需要回退covernum= endpos–beginpos; 向右移動beginpos++;endpos++;

3 如果covernum >maxcover  更新maxcover = covernum

4 如果a[endpos] –a[beginpos]  < l ,endpos++;

迴圈直到endpos <= n – 1

百度北京站2014研發筆試

1 osi七層模型 2物理層 3 資料鏈路層 4 網路層 5傳輸層 6 會話層 7表示層 8 應用層 2 程序間資料共享的方式三種 檔案對映 共享記憶體 訊號匿名管道 命名管道 郵件槽剪貼簿 3 tcp udp區別 4 列印陣列的所有組合 include int n 0 void swap int ...

百度北京站2014研發筆試

1 osi七層模型 2物理層 3 資料鏈路層 4 網路層 5傳輸層 6 會話層 7表示層 8 應用層 2 程序間資料共享的方式三種 檔案對映 共享記憶體 訊號匿名管道 命名管道 郵件槽剪貼簿 3 tcp udp區別 4 列印陣列的所有組合 cpp view plain copy include in...

百度 2015 武漢研發筆試題

一 簡答題 1.列出至少6中內排序方法,並寫出相應的時間複雜度和空間複雜度以及穩定性 2.多執行緒中的同步互斥方法都有哪些?3.程序間通訊的方式有哪些?哪種是效率最高的?socket,pipe,共享記憶體,訊息佇列,訊號,訊號量 效率最高的是 共享記憶體。360面試中問到了共享記憶體在系統中是如何實...