數(shù)據(jù)結(jié)構相關面試問題

重要參考鏈接[https://juejin.im/post/58ca051f61ff4b0060165122]

堆與棧(http://blog.csdn.net/hairetz/article/details/4141043/)

棧區(qū)(stack)由編譯器自動分配釋放,存放方法(函數(shù))的參數(shù)值佩捞,局部變量的值等整胃。
堆區(qū)(heap)一般由程序員分配與釋放李破,若程序員不釋放绿满,則會內(nèi)存溢出遮糖。
棧:只要棧的剩余空間大于所申請空間,系統(tǒng)將為程序提供內(nèi)存孽亲,否則將報異常提示棧溢出慧妄。
堆:首先應該知道操作系統(tǒng)有一個記錄空閑內(nèi)存地址的鏈表顷牌,當系統(tǒng)收到程序的申請時,會遍歷該鏈表塞淹,尋找第一個空間大于所申請空間的堆結(jié)點窟蓝,然后將該結(jié)點從空閑結(jié)點鏈表中刪除,并將該結(jié)點的空間分配給程序窖铡,另外疗锐,對于大多數(shù)系統(tǒng)坊谁,會在這塊內(nèi)存空間中的首地址處記錄本次分配的大小,這樣滑臊,代碼中的delete語句才能正確的釋放本內(nèi)存空間口芍。
另外,由于找到的堆結(jié)點的大小不一定正好等于申請的大小雇卷,系統(tǒng)會自動的將多余的那部分重新放入空閑鏈表中鬓椭。
棧:在Windows下,棧是向低地址擴展的數(shù)據(jù)結(jié)構,是一塊連續(xù)的內(nèi)存的區(qū)域关划。這句話的意思是棧頂?shù)牡刂泛蜅5淖畲笕萘渴窍到y(tǒng)預先規(guī)定好的小染,在WINDOWS下,棧的大小是2M(也有的說是1M贮折,總之是一個編譯時就確定的常數(shù))裤翩,如果申請的空間超過棧的剩余空間時,將提示overflow调榄。因此踊赠,能從棧獲得的空間較小。
堆:堆是向高地址擴展的數(shù)據(jù)結(jié)構每庆,是不連續(xù)的內(nèi)存區(qū)域筐带。這是由于系統(tǒng)是用鏈表來存儲的空閑內(nèi)存地址的,自然是不連續(xù)的缤灵,而鏈表的遍歷方向是由低地址向高地址伦籍。堆的大小受限于計算機系統(tǒng)中有效的虛擬內(nèi)存。由此可見腮出,堆獲得的空間比較靈活帖鸦,也比較大。

hashmap的基礎數(shù)據(jù)結(jié)構

HashMap基于hashing原理利诺,我們通過put()和get()方法儲存和獲取對象富蓄。當我們將鍵值對傳遞給put()方法時剩燥,它調(diào)用鍵對象的hashCode()方法來計算hashcode慢逾,讓后找到bucket位置來儲存值對象。當獲取對象時灭红,通過鍵對象的equals()方法找到正確的鍵值對侣滩,然后返回值對象。HashMap使用LinkedList來解決碰撞問題变擒,當發(fā)生碰撞了君珠,對象將會儲存在LinkedList的下一個節(jié)點中。 HashMap在每個LinkedList節(jié)點中儲存鍵值對對象娇斑。

循環(huán)隊列

循環(huán)隊列的優(yōu)點:

可以有效的利用資源策添。用數(shù)組實現(xiàn)隊列時材部,如果不移動,隨著數(shù)據(jù)的不斷讀寫唯竹,會出現(xiàn)假滿隊列的情況乐导。即尾數(shù)組已滿但頭數(shù)組還是空的;循環(huán)隊列也是一種數(shù)組浸颓,只是它在邏輯上把數(shù)組的頭和尾相連物臂,形成循環(huán)隊列,當數(shù)組尾滿的時候产上,要判斷數(shù)組頭是否為空棵磷,不為空繼續(xù)存放數(shù)據(jù)。

循環(huán)隊列的缺點:

循環(huán)隊列中晋涣,由于入隊時尾指針向前追趕頭指針仪媒;出隊時頭指針向前追趕尾指針,造成隊空和隊滿時頭尾指針均相等谢鹊。因此规丽,無法通過條件front==rear來判別隊列是"空"是"滿"。

解決這個問題有兩個辦法:一是增加一個參數(shù)撇贺,用來記錄數(shù)組中當前元素的個數(shù)赌莺;第二個辦法是,少用一個存儲空間松嘶,也就是數(shù)組的最后一個存數(shù)空間不用艘狭,當(rear+1)%maxsiz=front時,隊列滿

棧結(jié)構與隊列的區(qū)別翠订?

棧(stack):限定只能在表的一端進行插入和刪除操作的線性表巢音。
隊列(queue):限定只能在表的一端插入和在另一端進行刪除操作的線性表。
1)隊列先進先出尽超,棧先進后出官撼。
2)對插入和刪除操作的“限定”不同。
3)遍歷數(shù)據(jù)速度不同似谁。隊列遍歷數(shù)據(jù)的速度要快得多傲绣。

二叉樹的深度優(yōu)先遍歷(遞歸與非遞歸(非遞歸后序最難))

寫出一次快排后的具體變化情況

什么是紅黑樹。

紅黑樹是每個節(jié)點都帶有顏色屬性的二叉查找樹巩踏,顏色或紅色或黑色秃诵。在二叉查找樹強制一般要求以外,對于任何有效的紅黑樹我們增加了如下的額外要求:
性質(zhì)1. 節(jié)點是紅色或黑色塞琼。
性質(zhì)2. 根節(jié)點是黑色菠净。
性質(zhì)3 每個葉節(jié)點(NIL節(jié)點,空節(jié)點)是黑色的。
性質(zhì)4 每個紅色節(jié)點的兩個子節(jié)點都是黑色毅往。(從每個葉子到根的所有路徑上不能有兩個連續(xù)的紅色節(jié)點)
性質(zhì)5. 從任一節(jié)點到其每個葉子的所有路徑都包含相同數(shù)目的黑色節(jié)點牵咙。
這些約束強制了紅黑樹的關鍵性質(zhì): 從根到葉子的最長的可能路徑不多于最短的可能路徑的兩倍長。結(jié)果是這個樹大致上是平衡的攀唯。因為操作比如插入霜大、刪除和查找某個值的最壞情況時間都要求與樹的高度成比例,這個在高度上的理論上限允許紅黑樹在最壞情況下都是高效的革答,而不同于普通的二叉查找樹战坤。

紅黑樹的插入和刪除

寫一個快排。

Quick Sort是目前已知最快的排序法残拐,平均復雜度為O(NlogN)途茫,可是最壞情況下將達O(N^2)。
Quick Sort算法可以敘述如下溪食。假設S代表將被處理的序列:
1囊卜、如果S的元素個數(shù)為0或1,結(jié)束错沃。
2栅组、取S中的任何一個元素,當做樞軸(pivot) v枢析。
3玉掸、將S分割為L、R兩段醒叁,使L內(nèi)的每一個元素都小于或等于v司浪,R內(nèi)的每一個元素都大于或等于v。
4把沼、對L啊易、R遞歸執(zhí)行Quick Sort。

一個單鏈表怎么判斷有沒有環(huán)饮睬?環(huán)的起點怎么找租谈? 如何找出環(huán)的連接點在哪里?帶環(huán)鏈表的長度是多少捆愁?

1割去、對于問題1,使用追趕的方法牙瓢,設定兩個指針slow劫拗、fast间校,從頭指針開始矾克,每次分別前進1步、2步憔足。如存在環(huán)胁附,則兩者相遇酒繁;如不存在環(huán),fast遇到NULL退出控妻。
2州袒、對于問題2,記錄下問題1的碰撞點p弓候,slow郎哭、fast從該點開始,再次碰撞所走過的操作數(shù)就是環(huán)的長度s菇存。
3夸研、問題3:有定理:碰撞點p到連接點的距離=頭指針到連接點的距離,因此依鸥,分別從碰撞點亥至、頭指針開始走,相遇的那個點就是連接點贱迟。
該定理的證明可參考:http://fayaa.com/tiku/view/7/
4姐扮、問題3中已經(jīng)求出連接點距離頭指針的長度,加上問題2中求出的環(huán)的長度衣吠,二者之和就是帶環(huán)單鏈表的長度

哈希表解決沖突的方法

開放定址法(當關鍵字key的哈希地址p=H(key)出現(xiàn)沖突時茶敏,以p為基礎,產(chǎn)生另一個哈希地址p1缚俏,如果p1仍然沖突睡榆,再以p為基礎,產(chǎn)生另一個哈希地址p2袍榆,…胀屿,直到找出一個不沖突的哈希地址pi ,將相應元素存入其中包雀,線性探測再散列宿崭,二次探測再散列,偽隨機探測再散列)
再哈希法(這種方法是同時構造多個不同的哈希函數(shù))
鏈地址法(這種方法的基本思想是將所有哈希地址為i的元素構成一個稱為同義詞鏈的單鏈表)
建立一個公共溢出區(qū)(將哈希表分為基本表和溢出表兩部分才写,凡是和基本表發(fā)生沖突的元素葡兑,一律填入溢出表)

散列表查找的復雜度

O(1)

動態(tài)規(guī)劃,最長公共子串等 最長遞增子序列(nlogn的算法)

[http://blog.csdn.net/joylnwang/article/details/6766317]

排序:快排赞草、歸并讹堤、堆,時間復雜度是一樣的厨疙,有什么區(qū)別洲守?為什么平均情況下快排最快?

給定一棵樹,除左右節(jié)點外梗醇,還有一個random域知允,不一定指向哪,可能是空節(jié)點叙谨,可能是樹中的其他節(jié)點温鸽,做樹拷貝。

大整數(shù)加手负、減涤垫、乘、除竟终、求模運算實現(xiàn)

二叉查找

二叉搜索樹

Top(k)

1.將輸入內(nèi)容(假設用數(shù)組存放)進行完全排序雹姊,從中選出排在前K的元素即為所求。有了這個思路衡楞,我們可以選擇相應的排序算法進行處理吱雏,目前來看快速排序,堆排序和歸并排序都能達到O(nlogn)的時間復雜度瘾境。
2.對輸入內(nèi)容進行部分排序歧杏,即只對前K大的元素進行排序(這K個元素即為所求)。此時我們可以選擇冒泡排序或選擇排序進行處理迷守,即每次冒泡(選擇)都能找到所求的一個元素犬绒。這類策略的時間復雜度是O(Kn)。
3.對輸入內(nèi)容不進行排序兑凿,顯而易見凯力,這種策略將會有更好的性能開銷。我們此時可以選擇兩種策略進行處理:
a)利用小根堆維護一個大小為K的數(shù)組礼华,目前該小根堆中的元素是排名前K的數(shù)咐鹤,其中根是最小的數(shù)。此后圣絮,每次從原數(shù)組中取一個元素與根進行比較祈惶,如大于根的元素,則將根元素替換并進行堆調(diào)整(下沉)扮匠,即保證小根堆中的元素仍然是排名前K的數(shù)捧请,且根元素仍然最小棒搜;否則不予處理疹蛉,取下一個數(shù)組元素繼續(xù)該過程。該算法的時間復雜度是O(nlogK)力麸,一般來說企業(yè)中都采用該策略處理top-K問題可款,因為該算法不需要一次將原數(shù)組中的內(nèi)容全部加載到內(nèi)存中育韩,而這正是海量數(shù)據(jù)處理必然會面臨的一個關卡。
b)利用快速排序的分劃函數(shù)找到分劃位置K筑舅,則其前面的內(nèi)容即為所求座慰。該算法是一種非常有效的處理方式陨舱,時間復雜度是O(n)翠拣。對于能一次加載到內(nèi)存中的數(shù)組,該策略非常優(yōu)秀游盲。

單鏈表翻轉(zhuǎn)(兩個指針如何實現(xiàn))误墓、查找、刪除益缎、插入以及雙向鏈表谜慌、有序鏈表合并

判斷一個整數(shù)是否是2的整數(shù)次冪.

(n&(n-1))

數(shù)組中只有一個數(shù)出現(xiàn)了兩次,求這個數(shù)莺奔,并使得空間效率最優(yōu)(用位圖bitmap欣范,比O(n)的線性空間更優(yōu))

位運算
利用異或的特性,xyx=yxx=y

二分查找(注意邊界條件)

二分查找算法的填空(PS:注意陷阱:數(shù)會溢出的問題)定中間值的時候?qū)戝e了 mind = low+high/2 令哟,后面回來一查恼琼,說這樣子會溢出 low+high 會越界溢出,查閱相關資料 mind = low+(high-low)>>1屏富,這樣 才可以晴竞,果然,哪里有這么簡單的題目…注意陷阱……

常見排序算法的實現(xiàn)以及穩(wěn)定性(快排跟歸并考的很多)

字符串翻轉(zhuǎn)(O(n))狠半、匹配(KMP算法)

指定一個數(shù)組噩死,求2個數(shù)的和等于指定的和(某一個數(shù)),如果是3,4,5神年,n個等于個的和(某一個數(shù))呢已维?(可以看作背包問題)

跳臺階問題

一堆數(shù)據(jù)怎么找中位數(shù)(分兩種,內(nèi)寸是不是能一次裝下所用數(shù)據(jù)已日,能的話用快排衣摩,不能用分桶)

[http://blog.csdn.net/jiyanfeng1/article/details/8088237]

找出一個字符串中只出現(xiàn)一次且是第一個的字符

建立一個hash表,遍歷一遍字符串捂敌,記錄每個字符出現(xiàn)的次數(shù)

在不使用額外空間的情況下艾扮,交換兩個數(shù)?

位操作(異或)或者加減

呼呼呼山
18 Sep 2017 9:04 PM

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末占婉,一起剝皮案震驚了整個濱河市碎紊,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌慢哈,老刑警劉巖绊汹,帶你破解...
    沈念sama閱讀 206,311評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件磺箕,死亡現(xiàn)場離奇詭異,居然都是意外死亡抛虫,警方通過查閱死者的電腦和手機松靡,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來建椰,“玉大人雕欺,你說我怎么就攤上這事∶藿悖” “怎么了屠列?”我有些...
    開封第一講書人閱讀 152,671評論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長伞矩。 經(jīng)常有香客問我笛洛,道長,這世上最難降的妖魔是什么乃坤? 我笑而不...
    開封第一講書人閱讀 55,252評論 1 279
  • 正文 為了忘掉前任苛让,我火速辦了婚禮,結(jié)果婚禮上湿诊,老公的妹妹穿的比我還像新娘狱杰。我一直安慰自己,他們只是感情好枫吧,可當我...
    茶點故事閱讀 64,253評論 5 371
  • 文/花漫 我一把揭開白布浦旱。 她就那樣靜靜地躺著,像睡著了一般九杂。 火紅的嫁衣襯著肌膚如雪颁湖。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,031評論 1 285
  • 那天例隆,我揣著相機與錄音甥捺,去河邊找鬼。 笑死镀层,一個胖子當著我的面吹牛镰禾,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播唱逢,決...
    沈念sama閱讀 38,340評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼吴侦,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了坞古?” 一聲冷哼從身側(cè)響起备韧,我...
    開封第一講書人閱讀 36,973評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎痪枫,沒想到半個月后织堂,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體叠艳,經(jīng)...
    沈念sama閱讀 43,466評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,937評論 2 323
  • 正文 我和宋清朗相戀三年易阳,在試婚紗的時候發(fā)現(xiàn)自己被綠了附较。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,039評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡潦俺,死狀恐怖拒课,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情黑竞,我是刑警寧澤捕发,帶...
    沈念sama閱讀 33,701評論 4 323
  • 正文 年R本政府宣布疏旨,位于F島的核電站很魂,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏檐涝。R本人自食惡果不足惜遏匆,卻給世界環(huán)境...
    茶點故事閱讀 39,254評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望谁榜。 院中可真熱鬧幅聘,春花似錦、人聲如沸窃植。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽巷怜。三九已至葛超,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間延塑,已是汗流浹背绣张。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留关带,地道東北人侥涵。 一個月前我還...
    沈念sama閱讀 45,497評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像宋雏,于是被迫代替她去往敵國和親芜飘。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,786評論 2 345

推薦閱讀更多精彩內(nèi)容