侵權投訴

算法題類型以及準備策略

算法與數據結構 ? 2021-09-02 10:50 ? 次閱讀

今天就和大家聊聊大公司的面試環節經常涉及的算法題類型以及準備策略。

問題難度首先大家比較關心的就是面試時候出現的算法題的難度,從我的個人經驗來看,除了有一次和同樣有acm獲獎經歷的面試官切磋了一次之外,基本上難度都沒有超過LeetCode的困難難度。并且這還是因為我有acm經歷加成的情況下,大部分問題都只有LeetCode Medium的難度。

當然LeetCode的中等難度這個范圍也是比較寬的,既有非常簡單無聊的水題,也有比較棘手,值得深入思考的高價值問題。所以只是知道這一點一點用也沒有,想要知道對自己來說究竟有多難,還是需要自己親身體會一下。

但可以非常肯定地說,LeetCode中Medium難度下的問題所用到的算法,基本上都在大學算法課程的內容里。幾乎沒有超綱的內容,也不涉及比較復雜和困難的數據結構,都是非常非常基礎的,甚至都遠遠達不到高中信息競賽的水平。我一點沒和大家夸張,下面這張圖是我網盤里當年高中競賽的課件,大家可以感受一下難度。

但是算法這個東西,大家千萬不要被嚇到,主要是心理上唬人,實際的難度并沒有那么大。真正下定決心去練習,從入門到精通也不過是幾個月的事情。我當年好幾個隊友都是大學才開始編程,短短半年時間已經在賽場上獨當一面了。

常見的題型面試或者白板編程,由于形式的限制,題目的選擇范圍其實并不大。并不難理解,畢竟面試的時間有限,也不能全拿來做題,而太困難太復雜的問題候選人一點思路也沒有,大部分人都做不上來,也完全起不到考察和篩選的意義。

所以拿來當做面試和白板編程的問題,不會很復雜,至少會保證絕大多數的候選人都聽說過。就好像打游戲一樣,哪怕是玩家津津樂道的魂游戲,總要有過關的可能。如果上來就考察一個問題,結果你連正解用到的算法都沒聽說過,一開始就沒有做出來的可能,這種問題問了就只能浪費時間。

根據我的經驗,面試當中常問的問題基本上就這幾種:二分、遞歸、分治、排序、動態規劃。

這幾種算法只要是科班出身,基本上都或多或少聽說過,理論上來說都應該能做出來。并且這些算法除了比較基礎之外,它們的代碼量都不大,一般核心代碼都不會超過30行,確保編碼的時間不會太長。第二是比較考驗思維,通過你對這幾個算法的理解深度,就足以看出來你的思維能力和算法能力了。

解題套路劃好了重點,再分享幾個解題的套路。

縮小問題規模有可能問題里問的是一個規模很大的問題,比如漢諾塔問題,要移動64個圓盤,這太復雜了,我們根本無法思考。不妨把問題的規模縮小,比如縮小到3個圓盤,然后我們就可以列舉一下情況,找找規律和套路了。

即使是在acm賽場當中,這個方法也非常管用。

確定復雜度在acm賽場上題目當中都會標明數據的大小范圍,除了起到限制作用之外也是一個很大的提示。我們可以根據數據的規模反推出正解的復雜度范圍,從而排除掉一些不可能的算法。

比如說要在個數當中尋找某個數,由于計算機每秒的運行次數在這個量級,這么大的規模遍歷一遍都有些扛不住,那么顯然正解的復雜度一定在及以下。這么一來,我們就可以根據算法的復雜度排除掉一大批達不到要求的算法,排除錯誤的選項。

在面試的時候面試官往往不會明確給出數據的規模,我們可以自己結合實際情況分析,當然直接提問也是一個不錯的選擇。

優化思路面試不是比賽,并不是一定要給出正解。有的時候,我們一時陷入誤區沒想到解法也是常有的。重要的并不是我們是否想出了解法,而是我們能否展現我們思維的能力,打動面試官。

所以有的時候一下子沒有想到最優解也沒有關系,我們可以先易后難,先把一些簡單可行的解法說出來,然后再進行優化。

比如LeetCode第4題,尋找兩個有序數組的中位數。我們當然很難一下子想出的正解,但是我們可以先從最簡單的方法說起。比如重新排序直接尋找,這樣操作的復雜度是。說出這個方法之后,我們接著從不使用排序解決問題的角度繼續思考,如此一步步逐漸深入,即使最終沒能找到正解,也體現出了我們的思考是有章法的,并且思考和分析問題的能力是有的。

建議最后給大家分享幾點我個人的小建議,幫助大家少走點彎路。

貴精不貴多如果是為了準備面試,就像我前面列舉的一樣,其實并不會涉及很多內容。相比去研究很多高大上面試的時候用不到的高大上算法,倒不如好好把這幾個算法啃扎實。

就拿排序來說,想要全部搞明白就很不簡單。我隨便寫幾個問題,大家不妨對照一下看看能不能回答上來。

冒泡排序和選擇排序有什么區別?

為什么說快速排序和歸并排序都基于分治算法,但它們的最差復雜度不同?

排序的穩定性是什么?哪些算法是穩定的,哪些不是?

關于快速排序算法的最差復雜度,有哪些優化?

如果都能不僅僅滿足原理,而是可以深入到細節的方方面面去鉆研,那么即使只是準備了幾個算法,應付一般的面試都不在話下。

成體系化訓練算法的學習過程是比較痛苦的,尤其是如果我們漫無目的地去訓練和學習,進展非常緩慢,非常勸退。很多同學都有刷題刷了一堆,但是水平好像沒什么提升的情況。

我個人感覺比較有效的方法是成體系化的訓練,不要按照題目順序刷題,而是以算法劃分專題,按照專題刷題。一個算法一個算法的硬啃,一個算法吃透再吃下一個。這樣訓練下來印象會非常深刻,對于算法的理解也會深刻得多,也不容易忘記。要比題目刷了一堆, 算法也用了一堆, 看起用得多,但也忘得多要好得多。

篇幅有限,今天就和大家聊到這里,感謝閱讀和支持。

責任編輯:haq

原文標題:LeetCode ,YYDS!

文章出處:【微信號:TheAlgorithm,微信公眾號:算法與數據結構】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏
分享:

評論

相關推薦

如何對電機控制算法FOC進行調試

什么是FOC? FOC算法的原理是什么? FOC算法的模塊是由哪些部分組成的? 如何對FOC算法進行調試? ...
發表于 09-18 09:16 ? 0次 閱讀

FPGA是給誰用的?FPGA有哪些應用

為什么大量的人會覺得FPGA難學? FPGA是給誰用的?FPGA有哪些應用? ...
發表于 09-18 06:35 ? 0次 閱讀

算法對比誤差公式

算法對比誤差公式 D
發表于 09-17 08:38 ? 0次 閱讀

Visual C++中的ODBC編程是什么

Visual C++ 中 的ODBC 編 程華 中 理 工 大 學 電 力 工 程 系 董 毅---- 摘 要:ODBC(Open Database Connectivit...
發表于 09-17 07:45 ? 0次 閱讀

Hadoop MapperReduce編程

一、前言 以微博為例,每個用戶會發很多微博,其中包含了很多關鍵詞信息。而這些關鍵詞就是用戶可能感興趣的事物。我們需要用Ha...
發表于 09-17 06:51 ? 0次 閱讀

對CK3M控制卡進行自定義伺服算法二次開發

本文的章節安排如下1 注意事項功能快捷鍵合理的創建標題,有助于目錄的生成如何改變文本的樣式插入鏈接與圖片如何插入一段漂亮的...
發表于 09-17 06:45 ? 0次 閱讀

使用C語言進行PID算法實現

前文對PID算法離散化和增量式PID算法原理進行來探索,之后又使用Matlab進行了仿真實驗,對PID三個參數又有了更深入的認...
發表于 09-16 09:11 ? 0次 閱讀

Python解釋器的基本結構

簡介Byterun是一個用Python實現的Python解釋器。通過對Byterun的研究,我驚奇地發現Python解釋器的基本結構很容易符合500行...
發表于 09-16 06:42 ? 0次 閱讀

BlueNRG-1和2低功耗藍牙協議棧編程手冊

BlueNRG-1和2低功耗藍牙協議棧編程手冊
發表于 09-15 09:29 ? 13次 閱讀

算法裁員,釋放出了哪些“惡之花”?

算法招聘不稀奇,現在利用AI算法來自動化處理海量簡歷篩選,已經是司空見慣的操作。但算法裁員,對于許多....
的頭像 腦極體 發表于 09-15 08:49 ? 603次 閱讀

光伏逆變器MPPT算法步長設定

發表于 09-15 07:08 ? 0次 閱讀

Programming C# 8.0電子版資源下載

Programming C# 8.0電子版資源下載
發表于 09-14 15:20 ? 28次 閱讀

ROS中導航功能包里路徑規劃A*算法中步驟和代碼詳解

一、下載編譯功能包 ? cd ~/catkin_ws/srcsudo apt-get install....
發表于 09-13 16:49 ? 1015次 閱讀

增量式PID算法的STM32實現 分析比例、積分、微分三個環節

雖然PID不是什么牛逼的東西,但是真心希望以后剛剛接觸這塊的人能盡快進入狀態。特地分享一些自己如何實....
發表于 09-13 16:37 ? 691次 閱讀
增量式PID算法的STM32實現 分析比例、積分、微分三個環節

虹科IDS NXT ocean人工智能成像平臺來襲

通過推理方式,可以解決傳統圖像處理無法處理或者是需要花費許多資源的影像任務。例如,對具有強烈變化的對....
的頭像 廣州虹科電子科技有限公司 發表于 09-12 10:38 ? 248次 閱讀

LabVIEW Vision圖像處理開發寶典電子版

LabVIEW Vision圖像處理開發寶典電子版
發表于 09-12 10:10 ? 22次 閱讀

教你如何美化Labview界面教程下載

教你如何美化Labview界面教程下載
發表于 09-12 09:40 ? 29次 閱讀

LabVIEW實用工具詳解電子版資源下載

LabVIEW實用工具詳解電子版資源下載
發表于 09-12 09:38 ? 31次 閱讀

ADXL345使用方法和調試經驗定算法綜述

ADXL345使用方法和調試經驗定算法綜述
發表于 09-12 09:35 ? 11次 閱讀

淺談我們身處的“數字邏輯”世界

也許你還沒有意識到,我們人類其實一直生活在“數字”的世界里,老祖宗發明了“度、量、衡”(這本質上就是....
的頭像 電子森林 發表于 09-09 10:22 ? 214次 閱讀
淺談我們身處的“數字邏輯”世界

LabVIEW常用設計模式電子版資源下載

LabVIEW常用設計模式電子版資源下載
發表于 09-09 10:19 ? 83次 閱讀

LabViEW編程之VI服務器綜述

LabViEW編程之VI服務器綜述
發表于 09-09 10:14 ? 29次 閱讀

基于LABVIEW編程的圖像處理綜述

基于LABVIEW編程的圖像處理綜述
發表于 09-09 10:11 ? 24次 閱讀

基于LABVIEW編程的ORC車牌識別系統

基于LABVIEW編程的ORC車牌識別系統
發表于 09-08 15:08 ? 25次 閱讀

SVPWM控制算法及工具綜述

SVPWM控制算法及工具綜述
發表于 09-08 10:41 ? 14次 閱讀

焊接機器人的分類介紹

焊接機器人分類有哪些?市場上都有哪些種類的焊接機器人?隨著焊接機器人市場的不斷發展,市場上也出現了種....
發表于 09-03 16:50 ? 186次 閱讀

數學建模算法大全電子版匯總下載

數學建模算法大全電子版匯總下載
發表于 09-03 09:28 ? 21次 閱讀

如何比較兩種截然不同的編程語言的性能

自從編程語言誕生以來,人們常常就哪種語言速度最快的問題爭論不休。無論是嚴肅的科學研究,還是深夜酒吧的....
的頭像 嵌入式ARM 發表于 09-02 14:55 ? 217次 閱讀

Linux系統編程中的文件描述符調用

文件描述符 進程每打開一個文件的時候,會獲得該文件的文件描述符,而后續的讀寫操作都把文件描述符作為參....
的頭像 C語言編程學習基地 發表于 09-02 09:50 ? 150次 閱讀
Linux系統編程中的文件描述符調用

AI落地盤古開天 跨越AI天塹時:行動代號“盤古大模型”

我采訪過一個案例,某工廠的IT負責人想要應用AI,咨詢之后卻發現開發成本過于高昂,人才、算力、算法等....
的頭像 腦極體 發表于 09-01 16:07 ? 906次 閱讀
AI落地盤古開天 跨越AI天塹時:行動代號“盤古大模型”

C++編程中整型數據在內存中存儲是怎么樣的

1.整型的歸類 char short int long 以上都分為有符號(signed)與無符號(u....
的頭像 C語言編程基礎 發表于 09-01 15:22 ? 1710次 閱讀

數字信號處理第四章IFFT算法PPT課件下載

數字信號處理第四章IFFT算法PPT課件下載
發表于 08-31 09:22 ? 39次 閱讀

怎么樣才能讓Java代碼編寫更規范化

作者 | 濤姐濤哥 鏈接 | cnblogs.com/taojietaoge/p/11575376.....
的頭像 Android編程精選 發表于 08-27 09:31 ? 1255次 閱讀

簡述Geant4 的軟件開發過程

Geant4 的軟件開發過程 Gabriele Cosmo(歐洲核子研究中心,瑞士日內瓦)用于 Ge....
的頭像 紅心機器人 發表于 08-26 16:22 ? 1459次 閱讀

一文帶你快速讀懂支持向量機 SVM 算法

簡介 支持向量機基本上是最好的有監督學習算法了。最開始接觸SVM是去年暑假的時候,老師要求交《統計學....
的頭像 尖刀視 發表于 08-26 15:27 ? 205次 閱讀
一文帶你快速讀懂支持向量機 SVM 算法

初識GUI應用函數以及文本方式顏色控制函數

C_GUI編程入門 第一章:認識GUI編程 在程序設計中,往往我們最后編譯的結果都是通過控制臺輸出所....
的頭像 開源嵌入式 發表于 08-26 11:29 ? 1262次 閱讀

我們的世界為什么需要DPU

區別 SmartNIC 與 DPU (數據處理器) 的依據是它的功能,而不是形態。對稱為 Smart....
的頭像 NVIDIA英偉達企業解決方案 發表于 08-25 16:39 ? 246次 閱讀

ICOM對講機寫頻編程軟件CSF33G下載

ICOM對講機寫頻編程軟件CSF33G下載
發表于 08-25 16:16 ? 42次 閱讀

ICOM對講機寫頻編程軟件CS-36FI下載

ICOM對講機寫頻編程軟件CS-36FI下載
發表于 08-25 16:10 ? 36次 閱讀

CPU如何執行代碼 匯編語言教程

學習編程其實就是學高級語言,即那些為人類設計的計算機語言。 但是,計算機不理解高級語言,必須通過編譯....
的頭像 奈因PCB電路板設計 發表于 08-25 11:14 ? 194次 閱讀
CPU如何執行代碼 匯編語言教程

流形學習LLE算法的配套Matlab源碼匯總

流形學習LLE算法的配套Matlab源碼匯總
發表于 08-25 09:30 ? 37次 閱讀

Windows編程之數據類型綜述

Windows編程之數據類型綜述
發表于 08-24 15:03 ? 42次 閱讀

Windows編程之變量與可變性詳解

Windows編程之變量與可變性詳解
發表于 08-24 14:52 ? 40次 閱讀

Windows編程之變量和常量差異綜述

Windows編程之變量和常量差異綜述
發表于 08-24 14:50 ? 36次 閱讀

Windows編程之數值運算綜述

Windows編程之數值運算綜述
發表于 08-24 14:46 ? 40次 閱讀

Windows編程之變量和可變性綜述

Windows編程之變量和可變性綜述
發表于 08-24 14:22 ? 36次 閱讀

程序員的自我修養-鏈接、裝載與庫電子版

學習總是那么無止境編譯器的書籍,給大家一起學習參考
發表于 08-24 09:57 ? 16次 閱讀

基于FPGA的自適應閾值分割算法實現

在圖像預處理中經常會碰到圖像分割問題,把感興趣的目標從背景圖像中提取出來,而經常使用的是簡單的全局閾....
發表于 08-23 16:27 ? 1533次 閱讀
基于FPGA的自適應閾值分割算法實現

基于Verilog的“自適應”形態學濾波算法實現

一、背景介紹 基于二值圖像的濾波算法即形態學濾波,在圖像目標采集的預處理中經常被使用到,針對不同的使....
發表于 08-23 16:17 ? 1328次 閱讀
基于Verilog的“自適應”形態學濾波算法實現

ARM Cortex-R系列編程手冊資源下載

ARM Cortex-R系列編程手冊資源下載
發表于 08-23 16:16 ? 24次 閱讀

編程一萬小時后的31條反思

大多數情況下,如果你正在做的事情無法在互聯網上找到答案,那么這通常意味著這個問題很難或者很重要,或者....
的頭像 奈因PCB電路板設計 發表于 08-23 14:47 ? 163次 閱讀

Verilog是編程語言嗎

知乎上刷到一個問題,問性能最強的編程語言是什么?看到高贊回答到是Verilog,然后在評論區就引發了....
的頭像 奈因PCB電路板設計 發表于 08-23 14:30 ? 1653次 閱讀

C語言編程中如何求出二叉樹后序遍歷

題目 已知二叉樹前序為 ABDFGCEH 后序序列為 BFDGACEH ,要求輸出后序遍歷為 FGD....
的頭像 C語言編程基礎 發表于 08-23 11:04 ? 1203次 閱讀

stm32用什么軟件編程 stm32軟件推薦

stm32是嵌入式單片機,有著高性能、低成本、低功耗、可裁剪的特點。相信許多萌新小伙伴還不知道stm....
的頭像 璟琰乀 發表于 08-19 11:27 ? 2213次 閱讀

HALCON項目應使用哪種編程語言

來源:機器視覺算法與應用 大多數HALCON解決方案都必須嵌入到PC端的應用程序中(例如,提供圖形用....
的頭像 尖刀視 發表于 08-18 10:36 ? 373次 閱讀

如何能快速提升編程能力

有小伙伴問:如何能快速提升編程能力?這感覺永遠沒有正確答案,每個人都有自己的套路,今天就來聊聊我對這....
的頭像 multisim 發表于 08-18 09:47 ? 202次 閱讀
如何能快速提升編程能力

編碼規范的本質是什么

不知不覺間,代碼也寫了二十余載,我已成精了。借著過來人的身份和語氣,有一件事情我一直都特別喜歡吐槽:....
的頭像 multisim 發表于 08-16 14:23 ? 310次 閱讀

C語言中的高內聚低耦合講解

編程時,我們講究的是高內聚低耦合,在協同開發、代碼移植、維護等環節都起到很重要的作用。 一、原理篇而....
的頭像 multisim 發表于 08-16 14:06 ? 287次 閱讀

編程語言講解 聰明的笨蛋CPU

聰明的人類發現把簡單的開關組合起來可以表達復雜的bool邏輯,在此基礎之上構建了 CPU ,因此 C....
的頭像 multisim 發表于 08-16 11:32 ? 324次 閱讀
編程語言講解 聰明的笨蛋CPU
免费无限看黄app_蜜柚app官网下载入口_成版人黄瓜app