資源 | 從算法到數據結構,百道面試問題實現答案集合

2021-02-08 機器之心

選自GitHub

作者:Sherali Obidov

機器之心編譯

參與:李亞洲、微胖、蔣思源


該資源是算法、數據結構以及面試問題解決方案的集合,裡面的 repository 包含了我對常見算法問題的解答以及數據結構的實現(用 Java)。該資源集合處於持續更新中。


項目地址:https://github.com/sherxon/AlgoDS


目前為止,該資源集合提供了算法、數據結構以及 200 道面試題的答案。


問題


問題被分成了三個等級:


簡單問題:http://suo.im/262F7q 

中等問題:http://suo.im/11JBcd

困難問題:http://suo.im/3pTT1R


問題方向


針對以下不同面試問題,各自的連結中都給出了解決方案。


陣列(Arrays)


旋轉陣列(Rotate Array):http://suo.im/2Z3CMz

Contains Duplicate:http://suo.im/2E9xnW

發現峰值元素:http://suo.im/4gQO3k

最大化子陣列(Maximum Subarray):http://suo.im/N0TXd

陣列中第 k 最大的元素(Kth Largest Element in an Array):http://suo.im/2P7aIi

搜索陣列中的所有 Duplicates:http://suo.im/2wQwpw

最長增長子序列(Longest Increasing Subsequence):http://suo.im/PvJyK

旋轉圖像、矩陣(Rotate Image, matrix):http://suo.im/3BGG1x

攪亂陣列(Shuffle an Array):http://suo.im/3V5MBe

在旋轉陣列中搜索最小值:http://suo.im/2xtLa0

在旋轉陣列中搜索:http://suo.im/1Ued08


鍊表(linked list)


單鍊表實現:http://suo.im/2n3Kzr

雙向鍊表實現(Doubly Linked List):http://suo.im/1y98CP

刪除鍊表中的結點:http://suo.im/41ZByL

回文鍊表(Palindrome Linked List):http://suo.im/3OWugt

反向鍊表(Reverse Linked List):http://suo.im/OxjXQ

兩個鍊表的交集點(Intersection of Two Linked Lists):http://suo.im/36rPzZ

鍊表循環:http://suo.im/gANC2

從表的底部一處 Nth 節點:http://suo.im/4D3RNj

合併分類鍊表(Merge Sort List):http://suo.im/4jAMx3

發現鍊表循環:http://suo.im/2UFfZI

合併 k 分類列表:http://suo.im/4uWyyt

其他有關列表的問題:http://suo.im/4TyiJ


二叉樹(Binary Tree)


二叉樹的層次遍歷(Binary Tree Level Order Traversal):http://suo.im/1DRKTK

左葉節點求和(Sum of Left Leaves):http://suo.im/nZnDk

二叉樹轉置(Invert Binary Tree): http://suo.im/27dXUu

二叉搜索樹迭代器(Binary Search Tree Iterator):http://suo.im/4EgmWR

二叉樹後序遍歷(Binary Tree Postorder Traversal):http://suo.im/2I6r5S

二叉樹前序遍歷(Binary Tree Preorder Traversal):http://suo.im/1AF5J0

平面化二叉樹為鍊表(Flatten Binary Tree to Linked List):http://suo.im/46kRsP

對稱樹(Symmetric Tree):http://suo.im/BnxLJ

二叉樹中序遍歷(Binary Tree Inorder Traversal):http://suo.im/snOMr

相似樹(Same Tree):http://suo.im/1OCC7W

二叉樹最大深度(Maximum Depth of Binary Tree):http://suo.im/2KinyW

平衡二叉樹(Balanced Binary Tree):http://suo.im/3goksD

二叉樹最小深度(Minimum Depth of Binary Tree):http://suo.im/2f53cs

平衡二叉搜索樹排序列表(Sorted List to Balanced Binary Search Tree):http://suo.im/2D1MAo

驗證二叉搜索樹(Validate Binary Search Tree):http://suo.im/1lkBnt

平衡搜索樹排序列表(Sorted List to Balanced BST):http://suo.im/2Qr9IL

平衡搜索樹第 k 最小元素(Kth Smallest Element in a BST):http://suo.im/4mwq7K

二叉樹的之字形層序遍歷(Binary Tree Zigzag Level Order Traversal):http://suo.im/3NCvZW

平衡搜索樹的結點刪除(Delete Node in a BST):http://suo.im/1cXcP3

平衡樹的最小公共祖先(Lowest Common Ancestor of BST):http://suo.im/MBljD

 二叉樹的左視圖(Binary Tree Left Side View):http://suo.im/1hzBvx

 二叉樹的右視圖(Binary Tree Right Side View):http://suo.im/2Invga

平衡搜索樹的眾數(Mode in BST):http://suo.im/3Jyrn2

最高頻率子樹和(Most Frequent Subtree Sum):http://suo.im/35LlcZ

搜尋每行最大元素(Find Largest Element in Each Row):http://suo.im/32twya


其他樹型問題:http://suo.im/4TyiJ


數學


整數拆分(Integer Break):http://suo.im/lJU8r

逆位(Reverse Bits):http://suo.im/2E075a

迴文數:(Palindrome Number):http://suo.im/3pkhnt

冪(Math.pow):http://suo.im/1Wr3E9

壺和水的問題(Jug and Water Problem):http://suo.im/1gWPQG

愛拉託遜新篩法(Sieve of Eratosthenes):http://suo.im/Pi0G7

費馬素數(Fermat's primality):http://suo.im/2HZFT3

評估逆波蘭式表示法(Evaluate Reverse Polish Notation):http://suo.im/jIGg6


堆棧&隊列(Stack & Queue)


最小堆棧:http://suo.im/4FiVlB

最小隊列:http://suo.im/3KEtsq

使用隊列實現堆棧:http://suo.im/D5r2s

使用堆棧實現隊列:http://suo.im/171IwF


動態編程(Dynamic Programming)


斐波那契數列:http://suo.im/1zjJhk

詞內換行(word break):http://suo.im/3BIxnZ

子集和:http://suo.im/abSSP

0/1 漸縮問題:http://suo.im/1gVbIL

最短回文(KMP):http://suo.im/362qXW


MISC


並查:http://suo.im/24ZJmj

排列:http://suo.im/2NZx1s

子集:http://suo.im/PgGSw


算法方向


排序與搜索(Sorting And Searching)


上推排序:http://suo.im/2ofoaz

插入排序:http://suo.im/2unWJM

選擇排序:http://suo.im/2Sqldb

計算排序:http://suo.im/ZsIt7

二叉搜索,上下界:http://suo.im/10C1jM

歸併排序:http://suo.im/1iBDRS

快速排序:http://suo.im/1ZV7sc


圖(Graphs


寬度優先搜索(BFS):http://suo.im/2GhGd8

深度優先搜索(DFS):http://suo.im/1xuHah

Prim 最小生成樹(MST):http://suo.im/34Ignu

KrusKal 最小生成樹(MST):無

拓撲排序:http://suo.im/2KxOO

最短路徑的戴克斯特拉算法(Dijsktra):http://suo.im/3uv4kJ

最短路徑的 Bellman-Ford 算法:http://suo.im/2HgD4k

啟發式路徑搜索(Heuristic Path Finding):http://suo.im/2pQoF6

二分圖:http://suo.im/29I5J1


字符串(String)


Rabin Karp 序列搜索:http://suo.im/3dUjZM

Ransom Note:http://suo.im/2fIVZc

逆字符串(Reverse String):http://suo.im/355a41

最長公共前綴(Longest Common Prefix):http://suo.im/1gt97D

Is 易位構詞(Anagram):http://suo.im/3BWyAQ

Needle and Haystack:http://suo.im/lXoT4

詞內換行(word break):http://suo.im/3BIxnZ


數據結構


樹(Trees)


二叉搜索樹(遞歸):http://suo.im/2I4nfe

二叉搜索樹(迭代):http://suo.im/1M2Q6Z 

AVL 樹:http://suo.im/151lYW 

Trie(Prefix 樹):http://suo.im/2evIeJ  



本文為機器之心編譯,轉載請聯繫本公眾號獲得授權

✄---

加入機器之心(全職記者/實習生):hr@jiqizhixin.com

投稿或尋求報導:editor@jiqizhixin.com

廣告&商務合作:bd@jiqizhixin.com

相關焦點

  • NLP、CV、語音相關AI算法工程師面試問題、代碼、簡歷模板、知識點等資源整理分享
    本資源整理了機器學習、深度學習、算法工程師等AI相關崗位面試需要知識點,常見代碼實戰(分為C/C++和python版本)、常見問題,簡歷模板、比賽/競賽相關的資源,分享給需要的朋友。•秋招面經 | 曠視科技算法崗秋招面試經驗分享 website        •面經+經驗分享|2019秋招算法崗復盤 website        •專科生阿里大數據一面面經(已過) website        •2019秋招算法崗復盤 website        •我面試了10家算法公司,這是我能記住的所有問題 website
  • 面試經驗分享之數據結構、算法題
    前言面試 IT 企業的研發崗位,數據結構和算法顯然是必考的項目。俺只學過普通的數據結構課程,沒讀過 STL,也沒有過 ACM 的訓練和比賽經歷,在一開始面對這樣類型題目的時候,心裡還是十分忐忑的。大大小小几十場面試下來,自己在這方面總算有了一定的心得積累,在此拋磚引玉, 以饗讀者。
  • Java 集合框架面試問題集錦
    Java常見面試問題。很好地理解集合框架,可以幫助你理解和利用Java的一些高級特性。下面是面試Java核心技術的一些很實用的問題。Q:最常見的數據結構有哪些,在哪些場景下應用它們?A. 大部分人都會遺漏樹和圖這兩種數據結構。樹和圖都是很有用的數據結構。如果你在回答中提及到它們的話,面試者可能會對你進行進一步進行的考核。Q:你如何自己實現List,Set和Map?
  • 前端學習數據結構與算法系列(一):初識數據結構與算法
    線性結構是一個有序數據元素的集合,其中數據元素之間的關係時一對一的關係,即除了第一個和最後一個元素之外,其他數據元素都是首尾接應的。常見的非線性結構有:二維數組、樹等存儲結構邏輯結構指的是數據間的關係,而存儲結構是邏輯結構用計算機語言的實現。常見的存儲結構有:順序存儲、鏈式存儲、索引存儲、散列存儲。
  • 數據結構與算法-2
    分治定義:map reduce的思想,把大的問題分解(Divide)成一個個小問題。把小問題的解(Conquer)一個個的合併(Combine)起來,分治是藉助遞歸去解決的。舉例:大文件在有限的資源下進行操作、二分法、快速排序、合併排序。
  • 40個Java集合面試問題和答案
    Java集合框架為Java程式語言的基礎,也是Java面試中很重要的一個知識點。這裡,我列出了一些關於Java集合的重要問題和答案。
  • 資源│機器學習、深度學習、算法工程師等 AI 相關崗位面試需要知識
    微信公眾號「乾貨」AI面試必備/深度學習100問附答案解析阿里巴巴計算機視覺算法實習生視頻面試面試經驗 AI 算法工程師(面試官角度)從零基礎到 BAT 算法崗 SP——秋招準備攻略螞蟻金服/曠視/虹軟/騰訊優圖暑期實習 offer 面經我在美團的這兩年(附校招筆試/面試/面經分享)1000
  • Python數據結構與算法分析
    計算機科學的研究對象是問題、解決問題的過程,以及通過該過程得到的解決方案。給定一個問題,計算機科學家的目標是開發一個能夠逐步解決該問題的算法。算法是具有有限步驟的過程,依照這個過程便能解決問題。因此,算法是解決方案。在研究問題解決過程的同時,計算機科學也研究抽象。抽象思維使我們分別從邏輯視角和物理視角來看待問題和解決方案。
  • 數據結構和算法學習指南
    首先,這裡講的都是普通的數據結構和算法,咱不是搞競賽的,野路子出生,只解決常規的問題,以面試為最終目標。另外,以下是我個人的經驗的總結,沒有哪本算法書會寫這些東西,所以請讀者試著理解我的角度,別糾結於細節問題,因為這篇文章就是對數據結構和算法建立一個框架性的認識。
  • 快速入門數據結構和算法
    本文簡要分享算法基礎、常見的數據結構以及排序算法,給同學們帶來一堂數據結構和算法的基礎課。文末福利:阿里雲開發者訓練營來了。一  前言1  為什麼要學習算法和數據結構?2  業務開發要掌握到程度? 二  數據結構基礎1  什麼是數據結構?數據結構是數據的組織、管理和存儲格式,其使用目的是為了高效的訪問和修改數據。數據結構是算法的基石。如果把算法比喻成美麗靈動的舞者,那麼數據結構就是舞者腳下廣闊而堅實的舞臺。2  物理結構和邏輯結構的區別?
  • 程式設計師面試必知的8個數據結構
    邏輯、存儲、運算數據(data)結構(structure)數據結構(data structure)數據結構是計算機存儲、組織數據的方式。數據結構是指相互之間存在一種或多種特定關係的數據元素的集合。通常情況下,精心選擇的數據結構可以帶來更高的運行或者存儲效率。數據結構往往同高效的檢索算法和索引技術有關。
  • 概述Java中的數據結構是什麼及其內部實現原理
    本文主講介紹幾種常用的數據結構,數據結構是一種容器的一個分支,容器時用來裝東西的,那麼數據結構就是專門用來存儲數據的容器。首先我們從數組來給大家漸漸引入數據結構,容器的概念。那麼數組是什麼呢,數組是一個對象,準確的說我們將對象進行分類,具有特定功能的對象就被成為數據結構或者容器,集合等,數組就是其中之一。
  • 數據結構與算法:聊一聊在面試中被常問的那幾個基礎算法的理解
    上一周的幾篇文章主要分享了有關數據結構相關的知識,有興趣的可以翻回去看一下。前面我也說到:數據結構和算法是一對"相愛相殺的"組合,所以接下來要分享下我個人對於一些算法的理解和實現。03排序算法算法基本上是面試必問的問題之一了。
  • 考研計算機 | 數據結構—結構算法
    2021計算機考研數據結構—結構算法算法的設計取決於數據(邏輯)結構,而算法的實現依賴於採用的存儲結構
  • 【算法系列】面試常用數據結構(二):鍊表
    Hello 大家好我是今天沒寫 bug 的八哥,上周我們總結分享了面試高頻數據結構中的數組和避坑指南,如果你還沒有閱讀的話快點擊下面圖片進行閱讀吧。之前我們講過,數據結構只有兩種:一維數據結構和多維數據結構。一維數據結構最重要的是連續性的數組和非連續性的鍊表,這種連續性和非連續性的特點會一直影響及應用在對應的多維數據結構中。
  • Python數據結構與算法分析 day5
    學習完算法分析,我們將進行到下一部分—基本數據類型,這章節主要學習棧、隊列、列表等抽象數據類型,今天主要學習棧及其應用。
  • Java集合List和Map面試題以及答案
    大家都知道,HashMap是我們非常常用的數據結構,它是由數組和鍊表組合構成的數據結構的,而在JDK1.8中引入了紅黑樹。接下直接進入正文吧!前言首先介紹Set、List以及Map接口。所以存入的元素都必須定義equals()方法來確保對象的唯一性,Set接口有兩個實現來Hashset和TreeSet,其中TreeSet是實現了SortedSet接口的。Map集合它提供了一個鍵映射到值的一個數據結構,記住map的值是個重複,但鍵是唯一的,Map的子類有很多比如創建的是HashMap和LinkedHashMap。
  • 【學習筆記】300分鐘搞定數據結構與算法
    對於棧中的數據來說,所有操作都是在棧的頂部完成的,只可以查看棧頂部的元素,只能夠向棧的頂部壓⼊數據,也只能從棧的頂部彈出數據。實現:利用一個單鍊表來實現棧的數據結構。而且,因為我們都只針對棧頂元素進行操作,所以借用單鍊表的頭就能讓所有棧的操作在 O(1) 的時間內完成。
  • 我們到底該如何學習《數據結構與算法》
    前言:我們到底該不該學習算法與數據結構?1、真的應該學習這個問題本身就不是個問題,所有人都在強調數據結構與算法比較重要,但是好像平時也沒用到,無法直觀的去感受它的重要性,於是把學習重心放在了常見的哪些框架身上,似乎只要熟悉了哪些框架的API,編程就會所向披靡。
  • 三面騰訊、頭條拿到offer後才知道,數據結構和算法太TM重要了
    數據:所有能被輸入到計算機中,且能被計算機處理的符號的集合。是計算機操作的對象的總稱。數據元素:數據(集合)中的一個「個體」,數據及結構中討論的基本單位數據項:數據的不可分割的最小單位。一個數據元素可由若干個數據項組成。數據類型:在一種程序設計語言中,變量所具有的數據種類。整型、浮點型、字符型等等邏輯結構:數據之間的相互關係。集合 結構中的數據元素除了同屬於一種類型外,別無其它關係。