LeetCode刷題攻略

目錄

一、LeetCode簡介

二、刷leetcode的主要目的

三、常用的數據結構

四、常用的算法思想

五、選擇算法題

1、刷題選擇

2、刷題方法

方法一:順序法

方法二:標簽法

方法三:隨機法

方法四:必殺法

六、刷題攻略

TIP 1:

TIP 2:

TIP 3:

TIP 4:


?

?

應屆生面試算法就考個數組 鏈表 二叉樹 矩陣 數組變著法子考你排序 查詢 指針 位運算 鏈表變著法子考你指針 最多再考個哈希 二叉樹變著法子考用遞歸和棧前中后遍歷 最多加上回溯 矩陣的話就是知道起點的路徑查詢和不知道起點的路徑查詢 掌握了這些面大廠就比較輕松了,其實和學歷技術關系也不大 大部分人先死在了想都不敢想上。

一、LeetCode簡介

據了解,LeetCode 是一個非常棒的 OJ(Online Judge)平臺,收集了許多公司的面試題目。相對其他 OJ 平臺而言,有著下面的幾個優點:

  • 題目全部來自業內大公司的真實面試
  • 不用處理輸入輸出,精力全放在解決具體問題上
  • 題目有豐富的討論,可以參考別人的思路
  • 精確了解自己代碼在所有提交代碼中運行效率的排名
  • 支持多種主流語言:C/C++,Python, Java
  • 可以在線進行測試,方便調試

二、刷leetcode的主要目的

  • 熟悉各互聯網公司的算法題目,為找工作做準備。
  • 復習以前學過的編程語言,LeetCode支持幾乎所有主流編程語言,大家可以用不同語言來做題。
  • 熟悉常見的算法和數據結構,LeetCode提供了交流平臺,一些大神會將自己的解法貼出來共享,有些巧妙的解法實在令人叫絕。
  • 學習別人的編程思維,加快編程的速度,避免常見的BUG。

??另外LeetCode的題型都非常簡單明了,并不需要的復雜的理解,一般都在50行以內就可以解決了,如果你寫了上百行代碼,就肯定說明你想太多了或太復雜,雖然都能用很短的代碼就能解決,但并不意味著LeetCode的題目非常簡單,實際上LeetCode基本上涉及到了所有常規的算法類型。

? 刷 LeetCode 的最大好處就是可以鍛煉解決問題的思維能力,相信我,如何去思考本身也是一個需要不斷學習和練習的技能。此外,大量高質量的題目可以加深我們對計算機科學中經典數據結構的深刻理解,從而可以快速用合適的數據結構去解決現實中的問題。我們看到很多ACM大牛,拿到題目后立即就能想出解法,大概就是因為他們對于各種數據結構有著深刻的認識吧。

?

三、常用的數據結構

  • Stack:簡單來說具有后進先出的特性,具體應用起來也是妙不可言,可以看看題目 32. Longest Valid Parentheses。
  • Linked List:鏈表可以快速地插入、刪除,但是查找比較費時(具體操作鏈表時結合圖會簡單很多,此外要注意空節點)。通常鏈表的相關問題可以用雙指針巧妙的解決,160. Intersection of Two Linked Lists 可以幫我們重新審視鏈表的操作。
  • Hash Table:利用 Hash 函數來將數據映射到固定的一塊區域,方便 O(1) 時間內讀取以及修改。37. Sudoku Solver 數獨是一個經典的回溯問題,配合 HashTable 的話,運行時間將大幅減少。
  • Tree:樹在計算機學科的應用十分廣泛,常用的有二叉搜索樹,紅黑書,B+樹等。樹的建立,遍歷,刪除相對來說比較復雜,通常會用到遞歸的思路,113. Path Sum II 是一個不錯的開胃菜。
  • Heap:特殊的完全二叉樹,“等級森嚴”,可以用 O(nlogn) 的時間復雜度來進行排序,可以用 O(nlogk) 的時間復雜度找出 n 個數中的最大(小)k個,具體可以看看 347. Top K Frequent Elements。

四、常用的算法思想

? 除了數據結構,具體算法在一個程序中也是十分重要的,而算法效率的度量則是時間復雜度和空間復雜度。對于一道編程問題,選用不同的數據結構和算法會得到不同的實現方式,比如“最長公共子串”。所以光能寫出問題的實現還不夠,還需要知道怎么針對問題設計算法,然后分析算法的復雜度來比較不同實現直接的優缺點。因此刷題之外,還需要記住每種算法實現的時間復雜度和空間復雜度。最常用的是Big O notation。一般情況下,人們更關注時間復雜度,往往希望找到比 O( n^2 ) 快的算法,在數據量比較大的情況下,算法時間復雜度最好是O(logn)或者O(n)。計算機學科中經典的算法思想就那么多,LeetCode 上面的題目涵蓋了其中大部分,下面大致來看下。

?

  • 分而治之:有點類似“大事化小、小事化了”的思想,經典的歸并排序和快速排序都用到這種思想,可以看看 Search a 2D Matrix II 來理解這種思想。
  • 動態規劃:有點類似數學中的歸納總結法,找出狀態轉移方程,然后逐步求解。 309. Best Time to Buy and Sell Stock with Cooldown 是理解動態規劃的一個不錯的例子。
  • 貪心算法:有時候只顧局部利益,最終也會有最好的全局收益。122. Best Time to Buy and Sell Stock II 看看該如何“貪心”。
  • 搜索算法(深度優先,廣度優先,二分搜索):在有限的解空間中找出滿足條件的解,深度和廣度通常比較費時間,二分搜索每次可以將問題規模縮小一半,所以比較高效。
  • 回溯:不斷地去試錯,同時要注意回頭是岸,走不通就換條路,最終也能找到解決問題方法或者知道問題無解,可以看看 131. Palindrome Partitioning。

??當然,還有一部分問題可能需要一些數學知識去解決,或者是需要一些位運算的技巧去快速解決。總之,我們希望找到時間復雜度低的解決方法。為了達到這個目的,我們可能需要在一個解題方法中融合多種思想

———————————————————————————————————————————

?

五、選擇算法題

點開Algorithms后,我們可以看到一列題目的列表,每個題目都有獨一無二序號,后面的接受率(Acceptance)表示提交的正確率,Difficulty表示難易程度。

LeetCode按難易程度分成了:Hard、Medium、Easy三個級別。

  • Easy級別一般并不需要太多思考就可以想到算法,甚至可以通過直接的方式,特別適合新手去熟悉編程語言。
  • Medium級別就會有些難度,一般都會涉及到經典的算法,需要一定的思考。
  • Hard級別是最難的,有些時候是算法本身的難度,有些時候特別需要你考慮到各種細節。

?

1、刷題選擇

盲目刷題不可取,因此,刷題要一定要搞清楚刷題的目的和原因。其實無外乎4種:

  • 如果想提升自己的思維能力,可以按照AC率(Accepted)由低到高二分查找匹配自己當前水平難度的題目,然后適當挑戰高難度題(二分時間復雜度是O(logn),至少比從易到難的O(n)節省時間)
  • 如果想鞏固某一專題,那自然應該按照tag來刷題,但是因為所用的方法在求解前已知,不太利于思維能力的提升
  • 如果什么都不懂,那么建議隨機刷題,一來可以漲見識,二來進步空間比較大
  • 如果想提高AC率或者增加自信,那么建議刷水題

人與人之間還是有天賦差別的,但區別在于經驗可以慢慢積累、再有個建議,題目如果太難超過當前自己能力的話,嘗試一定時間后還是老老實實看題解吧

?

2、刷題方法

方法一:順序法

建議未刷過題的新人按著順序(AC)來,前 150 題覆蓋了很多經典題目和知識點,指針法類如『3 sum』系列,動規類如『regex matching』,搜索類題目如『Sodoku Solver』。

基本熟悉知識點(圖、樹、堆、棧、鏈表、哈希表、記憶搜索、動態規劃、指針法、并查集等)后,可以一類類標簽強攻。Leetcode 右側的標簽系統雖然未必 100% 完整,但是大致分類做得還不錯。

面試前的一個月可以只做『Hard』標簽的題目,因為一般兩遍之后對于大部分『Medium』難度以下的題目都是肌肉記憶了。多練習『Hard』類題目可以讓自己的思路更開闊,因為很多題目使用的奇淫巧技讓人驚訝,比如 Leetcode 精心設計連續題號的『84. Largest Rectangle in Histogram』、『85. Maximal Rectangle』。

方法二:標簽法

按照網站給大家排列的不同tags,起到模塊化的復習和學習作用。舉個例子:比如復習鏈表的內容,就選Linked List這部分的23個題目。刷完之后可以再總結一下常用的方法和數據結構與構造方式。請不要為了刷題而刷題,一定是為了彌補一部分的知識去做。

?

方法三:隨機法

隨心所欲的選擇難度與刷題順序,哪個順眼做哪個。本方法只適合業余編程,不從事本行業的同學以及大神級人物

?

方法四:必殺法

leetcode是有公司題庫的,一句話:面哪家,刷哪家

?

六、刷題攻略

?

TIP 1:

眾所周知,上古時期號稱刷完leetcode所有題的大神,只不過是因為當時只有150道。而截至2018年1月,leetcode已經有700道題,且部分難度不小。要全部刷完,除了浪費你自己的時間,似乎找不到別的目的。

因此,對于大多數人來說,沒有時間也沒有必要把所有題目都做一遍(時間充裕可以隨意)。可以考慮序號為前250位的題目,因為那些全是經典與必考題。

TIP 2:

善用收藏夾,要養成『一道題第二次練習尚不能解就加入收藏夾』的習慣,且需要定期清空收藏夾:每道題不需提示下通過兩次后才能移出收藏夾。只想要答案的話很容易,題目評論區五花八門的答案,動不動就秀 python 一行代碼解決,有那么多人點贊。問題是,你去做算法題,是去學習編程語言的奇技淫巧的,還是學習算法思維的呢?你的快樂,到底源自復制別人的一行代碼通過測試,已完成題目 +1,還是源自自己通過邏輯推理和算法框架不看答案寫出解法?經典題目不是刷一遍就完事的,要刷很多遍,因為大家在刷某個專題的時候,一定會忘一些之前的知識,例如刷到了貪心,可能回溯就已經有點想不起來了。所以一定要多刷,加深記憶,然后面試之前一段時間就開始看各個專題的總結篇,進行快速回顧。

TIP 3:

可以按照下文的面試出題頻率順序來做,從頻率最高的一批開始。?而且請盡量不使用IDE,直接在平臺上寫代碼。?

面試前可以購買會員,按照公司的標簽來練習,也可以結合白板練習。面試前如果時間緊迫,那么練習的優先級分別是:即將面試公司的題目、收藏夾里的舊題目、剩余的新題。

沖刺階段的練習請盡量不要打開題型標簽,給自己思考的空間。如果真的刷了三遍以上還沒法達到理想目標,那么一定是學習方法出了問題,請多總結。

TIP 4:

寫好代碼先不要提交,人工檢查一下代碼,比如分號是否都有寫,return有沒少等。?人工檢查完后使用“Custom Testcase”功能自定義測試用例,注意檢查邊界,然后“Run Code”,這步可以發現蠻多問題的。??等RunCode通過后,再去提交。

?

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/450807.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/450807.shtml
英文地址,請注明出處:http://en.pswp.cn/news/450807.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

SQLserver數據庫反編譯生成Hibernate實體類和映射文件

一、建立項目和sqlserver數據庫 eclipse,我使用的版本是neon3 二、Data Source Explorer 選擇OK 在data source Explorer的Database Connections 選擇New 填寫好General的連接信息 新建New Driver Definition 填寫完選擇OK 選擇剛才的Drivers Test Connetion測試 N…

最受歡迎的5大Linux發行版

摘要:要統計有多少人在使用那款Linux發行版幾乎是不可能的事情,但我們可以使用一些在線分析工具來大概地看看哪些Linux發行版更受歡迎。 Google Trends的數據顯示,Ubuntu用戶正在流向Mint,但依然在各方面都比其它Linux發行版更有優…

C#動態操作DataTable(新增行、列、查詢行、列等)

public void CreateTable(){//創建表DataTable dt new DataTable();//1、添加列dt.Columns.Add("Name", typeof(string)); //數據類型為 文本//2、通過列架構添加列DataColumn age new DataColumn("Age", typeof(Int32)); //數據類型為 整形DataColumn…

使用IntelliJ IDEA 配置Maven(入門)

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 1. 下載Maven 官方地址:http://maven.apache.org/download.cgi 解壓并新建一個本地倉庫文件夾 2.配置本地倉庫路徑 3.配…

[算法]不使用*、/、+、-、%操作符求一個數的1/3

摘要:算法一直是程序員進階的一道龍門,通常算法都是為了更高效地解決問題而創造的,但也有的只是出于學術性,并不在意其實際意義。這是近日在國外技術問答網站stackoverflow的一個熱門問題,不知道你能給出幾種解決方法&…

2022屆互聯網秋招備戰

文章目錄1、何為秋招?1.1應屆生身份1.2秋招、春招、校招1.3、社招、海投2.秋招信息如何獲取?3、如何備戰秋招?3.1、簡歷(ps做簡歷)3.2、筆試準備3.3、面試準備4、日常實習和暑假實習?1、春招≠暑期實習2、什…

php 兩變量值互換 方法

//方法一:$a "abc";$b"def";$a $a^$b;$b $b^$a;$a $a^$b;//方法二:list($a, $b) array($b, $a);//方法三:$a $a . $b;$b strlen( $b );$b substr( $a,0,(strlen($a)- $b ));$a substr( $a, strlen($b));//方法四&…

MySQL5.7 group by新特性,報錯1055

項目中本來使用的是mysql5.6進行開發,切換到5.7之后,突然發現原來的一些sql運行都報錯,錯誤編碼1055,錯誤信息和sql_mode中的“only_full_group_by“關,到網上看了原因,說是mysql5.7中only_full_group_by這…

IDEA中多行注釋及取消注釋快捷鍵

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 1、一次性添加多行注釋的快捷鍵 首先選中要注釋區域,然后 ctrl/ 這個是多行代碼分行注釋,每行一個注釋…

為什么程序員不擅長估算時間?

摘要:時間估算是困難的,每一個程序員都有一個現實的估計區間,低于這個區間的估計意味著(構件,測試,檢查代碼的)時間開銷被低估了,超過這個區間的估計意味著這個任務太大而很難預估。…

red hat enterprise linux 7關閉防火墻的方法

2019獨角獸企業重金招聘Python工程師標準>>> red hat enterprise linux 7發布后,發現防火墻也變了,如何關閉防火墻呢,下面是方法 1.查看firewall的狀態 [rootsztech7 ~]# systemctl status firewalld firewalld.service - firewal…

IOS —— 網絡那些事(上) - http協議

作為一名并不太合格的程序員,今天要分享學習的成果,竟然講的是網絡相關HTTP協議的事情。(也算是復習了) 乍看HTTP協議的內容著實是十分復雜的,涉及到十分多互聯網"底層"框架的東西。今天就先撇開這部分詳細內…

【最新版】Java速成路線(急于找工作!)

文章目錄計算機網絡分層結構TCP/UDPHTTP/HTTPS狀態碼Cookie 和 SessionURI和URL操作系統線程和進程數據結構和算法數據結構算法設計模式(23種)單例工廠代理適配器觀察者模板實操工具Git/SVNMaven/GradleLinux基本操作NginxELKpostmanJAVA基礎語言基礎JVM…

Java Web Start實例

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 JWS讓用戶可以下載服務器端的Java Application到本機運行,并且沒有安裝、配置等繁瑣的操作JWS的運行原理:瀏覽器…

老派程序員——徒手實現偉大成就

摘要:本文介紹了三位非常著名的程序員:Ken Thompson,Joe Armstrong 和 Jamie Zawinski,他們是如何發明一門新語言,他們開發軟件時會像我們一樣使用當今流行的開發工具嗎?當讀Peter Seibel的精彩著作《編程人生:15位軟件…

互聯網大廠項目研發流程

文章目錄階段一:階段二:階段三:階段四:階段五:開發人員:測試人員:設計師:階段六:階段七:總結:本文章學習自:https://www.bilibili.com…

centos常見錯誤 Failed to set locale, defaulting to C

錯誤描述: 當在centos中使用yum命令時,輸出錯誤: [rootlocalhost yum.repos.d]# yum list |grep prceFailed to set locale, defaulting to C 用locale檢測,出現如下提示: rootlocalhost yum.repos.d]# localelocale: …

圖片上傳知識點梳理

在日常項目開發中,圖片上傳是一個十分常見的場景。而現在的各種UI框架都提供了自己的上傳組件,網上第三方的上傳組件也多如牛毛。可能你早已習慣了直接使用這些現成的組件,然而對于其具體的實現,卻并未深入解析。本文將通過簡單的…

解決 java.lang.IllegalArgumentException: Repository interface must not be null on initialization!

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 報錯:Caused by: java.lang.IllegalArgumentException: Repository interface must not be null on initialization! Cause…

【狂神說】JVM

文章目錄1.JVM的位置2.JVM的體系結構3.類加載器4.雙親委派機制(重要)5.沙箱安全機制(了解)6.native(核心)7.PC寄存器(了解)8.方法區9.棧10.三種JVM11.堆(Heap)12.新生區、老年區13.永…