刷面試演算法題
㈠ 演算法如何刷題
1、原題
我自己感覺原題的概率還是挺大的,特別是劍指offer的66題更是如此。千萬別小看這66題,這幾十道題裡面基本所有的演算法類型都有包括在內,常用的數據結構,操作方式,常用演算法思路都有不少的題。
如果真的能夠充分理解這幾十道題的最優解,我感覺其實已經形成基本的演算法思維了。
另外,leetcode的原題也很常見,因為LC本身題量大,在裡面出原題不是為了考倒你,而是檢驗你的刷題質量。
畢竟那些大公司面試官也不是傻子,知道你在面試前肯定會大規模刷題的。所以把刷過的題完全搞懂才是最重要的。
2、改編題
改編題就很顯而易見了。改編題大多需要從基本的演算法原理中找到處理的思維,然後結合實際題干進行性能優化,就能夠搞定。
這里要記得一點的是,正常的演算法考察不會故意刁難你(正常情況),也不會給過多的時間讓你思考和敲代碼。
所以遇到改編題不要想得太復雜,盡量要找到它的演算法思維是什麼。怎麼說呢,透過現象看本質。我總結的改編題有以下幾種思路:
1)新的數據結構,換湯不換葯。比如最常見的排序演算法的改編,原來是對數字進行排序,現在對鏈表排序等等。比較難一點的可能會遇到自定義的數據結構。但是演算法本質不會變。
2)演算法類型改編。
這里要說的就是一個比較大的范圍,比如動態規劃、貪心演算法、遞歸、回溯和分治等等。這種是從演算法大的類型上進行改編,很難用相同的套路去解題。
遇到這類題的關鍵就是要先弄明白演算法核心。比如動態規劃的狀態方程,貪心演算法的局部最優情況,遞歸回溯的邊界判斷,分治的子問題劃分等等。這種類型的確比較難把握,怎麼碩呢,每種類型的都來搞幾道感覺感覺吧。
3)添加應用題背景。
這種題目看起來不難,但是難就難在對應用題背景的理解,需要去理解題意,然後考慮合適的數據結構和處理演算法。這裡面有數學建模的思維在裡面,需要把一堆無用的信息剔除,篩選出有效的信息,然後才能選擇正確的演算法。
3、創新題
這類題考察的是你的擴展思維,如果說上面的題考查的是你的思維深度,這種題就是考察演算法的廣度。可能一看題目,完全沒見過這種類型。但是演算法本身其實不就是讓計算機代替人腦進行高重復性的計算嘛。
首先你需要想到你應該去怎麼算這個題,然後再換到計算機上,會發生什麼問題(空間時間問題,運行效率,代碼冗餘等等),之後再想通過經典的演算法原理來解決這些
1、題型分類
按照個人的習慣,喜歡按照一種類型狂刷,然後再刷另外一種類型。一般常見的演算法類型可分為:
數組、鏈表
包含基本排序演算法、二分查找、鏈表的一系列操作。
棧、隊列、堆
利用棧、隊列互相實現,堆的使用
二叉樹與圖
主要是遍歷演算法和節點的計算:
二叉樹四種遍歷方式、廣度優先遍歷(BFS)和廣度優先遍歷(DFS),節點到節點距離等等。
哈希表
使用標准庫自帶的模板或者函數就很簡單了,一般會與其它數據結構相結合來提升時間復雜度。
字元串操作
字元串的操作也很多,本質上可以看作是數組的操作。另外字元串的一些匹配和尋求字串的演算法還是非常具有思考價值的。KMP,馬拉車等等。
遞歸
重點掌握邊界判斷條件。
回溯
重點掌握邊界判斷條件。
分治
重點掌握如何劃分子問題。
動態規劃
題太多了,可從一階dp到二階dp理解不同的狀態方程。
貪心及其它
這個就很容易理解了,遇到貪心題應該要偷笑了。
2、高頻熱點多刷
這不多說了吧,Leetcode熱題HOT 100。你值得擁有。
在不知道怎麼刷的情況下,不如先刷起來。刷個題沒那麼多捷徑,只有堅持刷起來了,才會形成自己的思維方式和學習習慣。
我建議是先按照類型刷,每個類型刷十幾二十道。然後打混按照演算法熱度排序重新查漏補缺。
3、思路回顧
許多同學在一股腦刷了很多題之後,再看做過的題會發現忘了不少。可能大家都是這樣的吧。我覺得是因為在刷題的時候過於心急,理解了大概就過了,或者類型做的太雜,沒有留下印象。
我比較喜歡的方式是偶爾會重新看看曾經做過的題,就看題目然後想思路,再畫一畫步驟演進,沒時間就不細敲了。這樣可以增強一下思維記憶,之前理解過的東西,再回憶起來還是非常快的。
㈡ 刷LeetCode對於國內IT企業面試幫助大嗎
就目前的情況來看,國內公司社招面試中,對於對於演算法的考驗越來越多,很多公司會拿leet code的原題用於面試。
根據我的了解,目前國內的中型廠記下的基本上不會考驗演算法題不會哪一道編程題,讓你手寫指示會咨詢你一些項目經驗,包括一些基礎的資料庫類的知識,或者是編程基礎類知識,比如說你用Java開發怎麼會問你spring cloud的spring boot相關知識,還有一些可能會問你高並發,生產問題處理,linux伺服器命令等等,手撕紅黑樹的情況不多。
對於國內的這些外資企業微軟、蝦皮等等,可能會問一些演算法題,但一般都不會特別難。數據結構問鏈表二叉樹,演算法問動態規劃之類的吧,也是min和easy難度。
對於頭部的大廠可能會出一些hard級別的演算法題,或者是改編過的編程題。目前程序員的人數越來越多,所以未來可能會有更多的公司會通過手撕編程題的方式進行面試。
對於校招來說說來的時候呢,是非常有幫助的,聽不起。各大公司的面試題中都會有演算法題,所以必須要通過刷leetcode來提升自己的。有可能你會遇到一些原題。
不管怎麼樣說演算法題都是很有幫助的,有助於提升編碼能力和邏輯能力,可以讓你的編碼能力一直保持一個不錯的水平,因為很多人平時都是curd小子,很多基礎知識都忘記了包括演算法能力。
leetcode上題很多,逐漸你會發現刷題太耗時間,所以建議採用哈夫曼樹規則。高頻題優先,各個tag刷10題以上掌握典型題總結演算法套路,先把觸手放在能掌握的地方。然後再去重點刷貪心和dp,分類好思路和模板。再去牛客搜公司名刷一些該公司面試題,有個底不至於面試沒見過。建議medium為主,easy和hard為輔。
一零言,聊聊IT,談談技術
㈢ 用Python刷面試演算法題是怎樣的體驗
記得有道最簡單的判斷輸入的數字中是否有重復的數字,然後寫了一行 return len(a) > len(set(a)),然後過了
㈣ 程序員不會演算法題怎麼面試
你好,很高興回答你的問題。
我覺得有兩個辦法吧。
一,找不面試演算法的公司。
二,在面試前多准備准備,刷一刷演算法題。
如果有幫助到你,請點擊採納。
㈤ android 面試,演算法題。
final int size = data.length;
for(int i = 0; i< size; i++){
if(data[i] == 0xffffffff)
data[i] = 0x80ffffff;
}
不知道你是不是這個意思。
㈥ 大公司筆試面試有哪些經典演算法題目
1、二維數組中的查找
具體例題:如果一個數字序列逆置之後跟原序列是一樣的就稱這樣的數字序列為迴文序列。例如:{1, 2, 1}, {15, 78, 78, 15} , {112} 是迴文序列, {1, 2, 2}, {15, 78, 87, 51} ,{112, 2, 11} 不是迴文序列。現在給出一個數字序列,允許使用一種轉換操作:選擇任意兩個相鄰的數,然後從序列移除這兩個數,並用這兩個數字的和插入到這兩個數之前的位置(只插入一個和)。現在對於所給序列要求出最少需要多少次操作可以將其變成迴文序列?
㈦ 面試會出哪些經典演算法題
1、排序演算法∶快速排序、歸並排序、計數排序
2、搜索演算法∶回溯、遞歸、剪枝技巧
3、圖論∶最短路、最小生成樹、網路流建模
4、動態規劃:背包問題、最長子序列、計數問題
5、基礎技巧:分治、倍增、二分、貪心
6、數組與鏈表:單/雙向鏈表、跳舞鏈
7、棧與隊列
8、樹與圖:最近公共祖先、並查集
9、哈希表
10、堆:大/小根堆、可並堆
11、字元串∶字典樹、後綴樹
(7)刷面試演算法題擴展閱讀:
演算法的重要性:
1、演算法能力能夠准確辨別一個程序員的技術功底是否扎實;
2、演算法能力是發掘程序員的學習能力與成長潛力的關鍵手段;
3、演算法能力能夠協助判斷程序員在面對新問題時,分析並解決問題的能力;
4、演算法能力是設計一個高性能系統、性能優化的必備基礎。
㈧ 用Python刷面試演算法題是怎樣的體驗
「以前還沒有run code功能時用py刷了一遍,不用ide,不調試,不運行,直接在編輯框寫完提交,倒也挺有樂趣,還能練白板寫碼能力。當時一百多題基本做完後正確率40%
總之不會因為用Py就沒法得到鍛煉。重要的是自律,每題盡量用自己會的最優的演算法,能常數空間就不要用線性空間,能線性時間就不要nlogn。」