算法攻略

知識(shí)結(jié)構(gòu):

常見的數(shù)據(jù)結(jié)構(gòu)及其實(shí)現(xiàn)

常見的數(shù)據(jù)結(jié)構(gòu)主要有數(shù)組弄痹、鏈表饭入、棧、隊(duì)列肛真、二叉堆圣拄、樹、圖等毁欣,其中棧和隊(duì)列的題目經(jīng)常出現(xiàn)在筆試試卷中,而且實(shí)際算法面試中二叉堆和圖考得很少岳掐,經(jīng)常出現(xiàn)的是數(shù)組凭疮、鏈表和二叉樹這幾種數(shù)據(jù)結(jié)構(gòu)類型的題目

(1) 數(shù)組雖然是最基礎(chǔ)的數(shù)據(jù)結(jié)構(gòu),但是能考的東西卻非常多串述,例如最常見的排序算法执解、找數(shù)組中第k大的數(shù)字、找兩個(gè)有序數(shù)組的中位數(shù)等

(2) 鏈表因其特殊的結(jié)構(gòu)也是掣傩铮考點(diǎn)衰腌,例如反轉(zhuǎn)鏈表、鏈表元素排序觅赊、合并兩個(gè)有序鏈表右蕊、判斷鏈表是否有環(huán)、有環(huán)的話環(huán)的起點(diǎn)在哪里等

(3) 二叉樹由于其天然的遞歸結(jié)構(gòu)吮螺,是最適合考查遞歸思想的數(shù)據(jù)結(jié)構(gòu)饶囚,例如判斷二叉樹是否平衡、判斷二叉樹是否相同鸠补、判斷二叉樹是否對(duì)稱等

(4) 棧和隊(duì)列也是很重要的數(shù)據(jù)結(jié)構(gòu)萝风,但是它們往往只是作為前期的筆試題,棧經(jīng)常出的題目就是給出一個(gè)棧的入棧序列紫岩,問下面哪個(gè)不可能是這個(gè)棧的出棧序列规惰。棧和隊(duì)列作為算法題并不多,常見的就是如何用兩個(gè)棧來實(shí)現(xiàn)一個(gè)隊(duì)列或者利用一個(gè)輔助棧來將一個(gè)棧中的元素排序

一般來說泉蝌,Android開發(fā)崗位的算法面試是不會(huì)出題要求面試者臨時(shí)設(shè)計(jì)一個(gè)數(shù)據(jù)結(jié)構(gòu)來解決某個(gè)問題歇万,大多數(shù)時(shí)候只是要求面試者能夠熟練掌握常見的數(shù)據(jù)結(jié)構(gòu)及其實(shí)現(xiàn)、能夠說出這種數(shù)據(jù)結(jié)構(gòu)的優(yōu)缺點(diǎn)即可

算法時(shí)間復(fù)雜度的計(jì)算

面試官會(huì)問復(fù)雜度梨与,如果復(fù)雜度較高會(huì)問你有沒有更優(yōu)解堕花。算法的運(yùn)行時(shí)間主要有三種表示符號(hào),但是最常見的就是大O表示法粥鞋。此外缘挽,算法導(dǎo)論中介紹了三種時(shí)間復(fù)雜度的計(jì)算方法,分別是代換法、遞歸樹法和主定理法壕曼。

常見的算法思想苏研,有遞歸、分治腮郊、貪心摹蘑、動(dòng)規(guī)等等

Induction(推導(dǎo))、Recursion(遞歸)轧飞、Reduction(規(guī)約)和Divide and Conquer(分治)衅鹿、貪心、動(dòng)態(tài)規(guī)劃

貪心算法其實(shí)還是比較好想到的过咬,它真正難的是如何證明這個(gè)貪心策略是正確的大渤,建議刷下LeetCode上的貪心題,雖然實(shí)際算法面試中很少出貪心題

動(dòng)規(guī)算法在緊張的算法面試時(shí)并不容易想出來掸绞,個(gè)人感覺就是要多練習(xí)泵三,然后學(xué)會(huì)列出動(dòng)規(guī)的遞推公式,處理好邊界情況衔掸,最后選擇合適的實(shí)現(xiàn)方式去實(shí)現(xiàn)烫幕。實(shí)際算法面試中如果遇到水平較高的面試官是有可能出動(dòng)規(guī)題的,其中最常見的就是最長(zhǎng)公共子序列和最長(zhǎng)遞增子序列等類型的題目

面試準(zhǔn)備:

  • 知識(shí)儲(chǔ)備
    基本的數(shù)據(jù)結(jié)構(gòu)敞映、排序算法较曼、時(shí)間復(fù)雜度
    數(shù)據(jù)結(jié)構(gòu)在java中的運(yùn)用——集合框架
    常見排序

  • 刷題
    題多時(shí)間少:
    常見10種排序、數(shù)組驱显、鏈表诗芜、棧、隊(duì)列埃疫、二叉樹 (集合)基本概念和使用
    常見排序算法伏恐、數(shù)據(jù)結(jié)構(gòu)(集合、二叉樹)復(fù)雜度栓霜,一般算法復(fù)雜度的估算
    排序算法翠桦、top面試題庫(kù)50題
    tips:超過十分鐘直接看答案,用紙筆輔助思考胳蛮,小階段結(jié)束后總結(jié)錯(cuò)誤和題目特點(diǎn)
    有強(qiáng)于無销凑,給出暴力解法,和面試官迭溝通改進(jìn)仅炊,這過程本身也是一個(gè)優(yōu)秀的思路

1斗幼、先刷高頻題(數(shù)組、鏈表抚垄、二叉樹等類型題)蜕窿,從探索模塊分類開始或者從簡(jiǎn)單模塊開始谋逻,
2、如果時(shí)間充足再刷自己相對(duì)薄弱的環(huán)節(jié)桐经,插入少量hard擴(kuò)展思路毁兆;
3、如果時(shí)間不充足的話那就直接看題看解答阴挣,可以反復(fù)看反復(fù)記气堕,刷題后按照題目類型分類歸納。有點(diǎn)檔次的企業(yè)也看重解題思路畔咧,且遇到原題機(jī)會(huì)不多茎芭,所以不要硬記答案
4、時(shí)間誓沸,難題三十分鐘骗爆,簡(jiǎn)單題15分鐘之內(nèi),開始練習(xí)時(shí)候?qū)捪拊?0min蔽介,簡(jiǎn)單題25min
有可行但不是最佳方案比木有方案要強(qiáng),一時(shí)想不出最佳方案可以邊寫邊改進(jìn)
5煮寡、有時(shí)間需要安排LeetCode模擬面試

此外:對(duì)于那些經(jīng)典或自己不明白的問題要把收藏起來虹蓄,定期的去回顧這些題目,這樣會(huì)慢慢的加強(qiáng)個(gè)人的思維能力幸撕。
最重要的一點(diǎn)就是要多動(dòng)手去練薇组,別以為一道題目很簡(jiǎn)單,等你寫完提交上去的時(shí)候你會(huì)發(fā)現(xiàn)很多問題坐儿,而我們就是在不斷遇到問題然后去解決的過程中加強(qiáng)自己的能力律胀。
LeetCode上的題解建議放在手機(jī)中,隨時(shí)查看
大神代碼

  • 手撕代碼

手寫代碼之前一定要先和面試官溝通好貌矿,確保你完全正確地理解了題目的意思炭菌,想好思路之后再開始寫,否則噼里啪啦寫了一堆沒用而且還有錯(cuò)誤的代碼讓面試官看了會(huì)留下不好的印象逛漫。

在線編程和線下手寫代碼是沒有代碼提示的黑低,所以平時(shí)有必要多練習(xí)手寫代碼,千萬不要犯明顯的基本語法錯(cuò)誤酌毡,同時(shí)要注意代碼風(fēng)格克握,例如代碼格式、變量命名枷踏、函數(shù)命名等菩暗,必要的時(shí)候做些防御性編程以及邊界值檢查等操作。

在沒有直接想出最優(yōu)解的情況下你可以先說出最直觀的暴力解法旭蠕,利用這段時(shí)間慢慢思考有沒有其他的更優(yōu)的解法停团,問面試官能不能給出思路提示旷坦,尊重、傾聽與溝通很重要

常見面試算法題匯總二

長(zhǎng)遠(yuǎn)來看客蹋,如何學(xué)好算法

怎樣才能學(xué)好算法
這個(gè)問題回答起來塞蹭,基本上很難。正如回答如何才能學(xué)好C++一樣讶坯。個(gè)人的幾點(diǎn)建議:
首先要學(xué)好數(shù)學(xué)番电,有高等數(shù)學(xué)、高等代數(shù)辆琅、離散數(shù)學(xué)漱办、數(shù)據(jù)結(jié)構(gòu)等方面的基礎(chǔ)。
然后多看一些代碼婉烟,研究它的算法娩井。多練習(xí)一些算法的實(shí)現(xiàn)。
另外似袁,算法是需要經(jīng)驗(yàn)的洞辣,也是一個(gè)很吃基本功的東西,好的算法是在通過扎實(shí)的基本功和潛心的研究得到的昙衅。正如想要下好圍棋扬霜,你需要首先掌握圍棋的基本技法,然后可以先記住一些定式而涉、死活技巧著瓶,最重要是不停的下,從中學(xué)習(xí)經(jīng)驗(yàn)啼县。
最后材原,多看一些趣味題,甚至腦筋急轉(zhuǎn)彎的題目季眷。很多看似和算法無關(guān)的東西其實(shí)都可以影響你的思維方法余蟹,例如36計(jì)。
算法是一種解決問題的思路子刮,算法不用學(xué)客叉,大家都會(huì),因?yàn)榻鉀Q問題的思路大家都有话告,只是有好和壞的區(qū)別罷了 兼搏,我們學(xué)習(xí)算法目的是提高我們思考問題的能力,不說要當(dāng)個(gè)象高斯一樣的數(shù)學(xué)家沙郭,至少要比那些沒學(xué)過算法的人聰明一點(diǎn)點(diǎn)佛呻。

閑扯

如果技術(shù)不能出彩,就展示自己的溝通能力病线,這一是讓面試官覺得很愿意和你合作吓著,二這也是很重要的一項(xiàng)工作技能鲤嫡。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市绑莺,隨后出現(xiàn)的幾起案子暖眼,更是在濱河造成了極大的恐慌,老刑警劉巖纺裁,帶你破解...
    沈念sama閱讀 211,948評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件诫肠,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡欺缘,警方通過查閱死者的電腦和手機(jī)栋豫,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,371評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來谚殊,“玉大人丧鸯,你說我怎么就攤上這事∧坌酰” “怎么了丛肢?”我有些...
    開封第一講書人閱讀 157,490評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)剿干。 經(jīng)常有香客問我摔踱,道長(zhǎng),這世上最難降的妖魔是什么怨愤? 我笑而不...
    開封第一講書人閱讀 56,521評(píng)論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮蛹批,結(jié)果婚禮上撰洗,老公的妹妹穿的比我還像新娘。我一直安慰自己腐芍,他們只是感情好差导,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,627評(píng)論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著猪勇,像睡著了一般设褐。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上泣刹,一...
    開封第一講書人閱讀 49,842評(píng)論 1 290
  • 那天助析,我揣著相機(jī)與錄音,去河邊找鬼椅您。 笑死外冀,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的掀泳。 我是一名探鬼主播雪隧,決...
    沈念sama閱讀 38,997評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼西轩,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了脑沿?” 一聲冷哼從身側(cè)響起藕畔,我...
    開封第一講書人閱讀 37,741評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎庄拇,沒想到半個(gè)月后注服,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,203評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡丛忆,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,534評(píng)論 2 327
  • 正文 我和宋清朗相戀三年祠汇,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片熄诡。...
    茶點(diǎn)故事閱讀 38,673評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡可很,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出凰浮,到底是詐尸還是另有隱情我抠,我是刑警寧澤,帶...
    沈念sama閱讀 34,339評(píng)論 4 330
  • 正文 年R本政府宣布袜茧,位于F島的核電站菜拓,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏笛厦。R本人自食惡果不足惜纳鼎,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,955評(píng)論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望裳凸。 院中可真熱鬧贱鄙,春花似錦、人聲如沸姨谷。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,770評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽梦湘。三九已至瞎颗,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間捌议,已是汗流浹背哼拔。 一陣腳步聲響...
    開封第一講書人閱讀 32,000評(píng)論 1 266
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留瓣颅,地道東北人管挟。 一個(gè)月前我還...
    沈念sama閱讀 46,394評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像弄捕,于是被迫代替她去往敵國(guó)和親僻孝。 傳聞我的和親對(duì)象是個(gè)殘疾皇子导帝,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,562評(píng)論 2 349

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

  • 前言 2. 實(shí)現(xiàn) Singleton 3. 數(shù)組中重復(fù)的數(shù)字 4. 二維數(shù)組中的查找 5. 替換空格 6. 從尾到...
    Observer_____閱讀 2,922評(píng)論 0 1
  • Java數(shù)據(jù)結(jié)構(gòu)和算法概覽 數(shù)據(jù)結(jié)構(gòu) 線性數(shù)據(jù)結(jié)構(gòu):常見的有一維數(shù)組,線性表穿铆,棧您单,隊(duì)列,雙隊(duì)列荞雏,串虐秦。 非線性數(shù)據(jù)結(jié)...
    逍遙天揚(yáng)閱讀 285評(píng)論 0 1
  • 一些概念 數(shù)據(jù)結(jié)構(gòu)就是研究數(shù)據(jù)的邏輯結(jié)構(gòu)和物理結(jié)構(gòu)以及它們之間相互關(guān)系,并對(duì)這種結(jié)構(gòu)定義相應(yīng)的運(yùn)算凤优,而且確保經(jīng)過這...
    Winterfell_Z閱讀 5,704評(píng)論 0 13
  • 1.什么是算法悦陋,什么是數(shù)據(jù)結(jié)構(gòu) 廣義上講,數(shù)據(jù)結(jié)構(gòu)是一組數(shù)據(jù)的存儲(chǔ)結(jié)構(gòu)筑辨。算法是操作數(shù)據(jù)的一組方法俺驶。 2.算法和數(shù)據(jù)...
    wa_it閱讀 197評(píng)論 0 0
  • 下午帶萌娃去超市暮现,充滿好奇的她又喜歡問這是啥,這次我不但告訴她這是什么那是什么楚昭,還讓她用手去感受不同的東西栖袋,像米,...
    小窗幽記_hj閱讀 117評(píng)論 0 0