成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

手寫二叉樹?程序員面試最常見問題TOP 48

開發 開發工具
在本文中,我們為各位讀者準備了 48 道基礎面試題,它可以幫助我們更深地理解數據結構。本文所有面試題都提供了 Java 解決方案,并介紹了比較流行的 GitHub 面試題項目。

同學,你會手寫二叉樹嗎?近來正值秋招季節,很多編程面試都要求手寫數據結構手推機器學習算法。各位同學為了面試也會刷各種編程題,其中數據結構與排序搜索算法又是最為基礎的內容。在本文中,我們為各位讀者準備了 48 道基礎面試題,它可以幫助我們更深地理解數據結構。本文所有面試題都提供了 Java 解決方案,并介紹了比較流行的 GitHub 面試題項目。

很多計算機科學專業畢業生和程序員都會去 Uber、今日頭條這樣的獨角獸公司,或者亞馬遜、微軟和谷歌這樣的科技巨頭申請編程和軟件開發職位。你在申請這些工作時,肯定很想知道面試官會問到哪些問題。

二叉樹

在本文中,作者會分享一些常見的編程面試問題,這些問題來自于針對不同經驗層次的程序員的面試——從應屆畢業生到具有一兩年經驗的程序員。

編程面試題通常包含數據結構和基于算法的問題,以及一些邏輯問題,例如:如何在不使用臨時變量的情況下交換兩個整數?

為了清晰,編程面試題需要劃分為不同主題。我們在面試中經常看到的領域是數組、鏈表、字符串、二叉樹以及有關算法的問題(例如字符串算法、快速排序或基數排序等排序算法),本文將介紹這些內容。

雖然本文無法覆蓋你在面試中將要面臨的所有問題,但是它可以給你提供足夠的思路,讓你在面試時對于各種挑戰有所準備。

一旦解決了這些問題,你就可以有信心面對任何電話面試或現場面試了。

當然,如果你對于基本數據結構和算法沒有足夠的知識儲備,那么直接接觸以下問題將對你沒有幫助。

算法和編程面試題 TOP 48

廢話少說,這里有一份「編程面試最常見的問題列表」:

1. 數組編程面試問題

數組是最基本的數據結構,它將元素儲存在連續的內存空間中。數組也是面試官最喜歡問的主題之一,在任何編程面試中都能聽到非常多關于數組的問題,例如反轉數組、排序數組或搜索數組元素等。

數組這種數據結構的主要優點在于如果給定索引,那么它會提供 O(1) 復雜度的搜索,這種搜索速度非常迅速。但是從數組中添加或移除元素會比較慢,因為一旦創建了數組,我們就很難再更改它的大小。如果需要更長或更短的數組,我們就需要重新創建新數組,并將老數組的所有元素復制到新數組中。

解決數組問題的關鍵是對數組數據結構有比較深的理解,同時還需要了解循環、遞歸和基本運算子等常見的編程結構。以下是一些常見的數組編程面試問題:

(1) 在一個元素為 1 到 100 的整數數組中,如何搜索缺失元素?

  • 解決方案:http://javarevisited.blogspot.com/2014/11/how-to-find-missing-number-on-integer-array-java.html

(2) 給定一個數組,如何搜索重復元素?

  • 解決方案:http://javarevisited.blogspot.com/2014/01/how-to-remove-duplicates-from-array-java-without-collection-API.html

(3) 給定一個亂序數組,如何搜索***和最小元素?

  • 解決方案:http://java67.blogspot.com/2014/02/how-to-find-largest-and-smallest-number-array-in-java.html

(4) 給定一個數值,如何搜索整數數組中加和為該數值的成對元素?

  • 解決方案:http://javarevisited.blogspot.com/2014/08/how-to-find-all-pairs-in-array-of-integers-whose-sum-equal-given-number-java.html

(5) 如果數組包含多個重復值,如何搜索所有重復值?

  • 解決方案:http://javarevisited.blogspot.com/2014/03/3-ways-to-find-first-non-repeated-character-String-programming-problem.html

(6) 給定一個數組,如何用 Java 刪除重復元素?如何在不使用庫的情況下移除數組中的重復元素?

  • 解決方案:http://javarevisited.blogspot.com/2014/01/how-to-remove-duplicates-from-array-java-without-collection-API.html

(7) 如何使用快速排序算法對整數數組進行排序?

  • 解決方案:http://javarevisited.blogspot.com/2014/08/quicksort-sorting-algorithm-in-java-in-place-example.html

(8) 如何使用 Java 反轉一個數組?

  • 解決方案:http://javarevisited.blogspot.com/2013/03/how-to-reverse-array-in-java-int-String-array-example.html

這些問題不僅能幫助我們提高解決問題的能力,同時也能提升我們關于數組數據結構的理解。

如果你需要了解更多基于數組的深度問題,你可以在 GitHub 或 Coursera 上多找找關于數據結構的課程與資料,例如在 GitHub 中,就有非常多關于數組的學習資料,下面我們介紹了一份中文版的谷歌的面試資料,它在 GitHub 上有 6 萬多的收藏量。

項目地址:

https://github.com/jwasham/coding-interview-university/blob/master/translations/README-cn.md

2. 鏈表編程面試問題

鏈表是補充數組數據結構的另一種常見數據結構。與數組類似,它也是線性數據結構,以線性方式存儲元素。

然而,與數組不同的是,它不會將元素存儲在連續的位置;相反,它會將其分散存儲在內存中,彼此通過節點相互連接。鏈表是節點列表,其中每個節點包含存儲的值和下一個節點的地址。

由于這種結構,在鏈表中添加或刪除元素變得很簡單,因為你只需要改變鏈接而不是創建數組,但是這樣會使搜索變得困難,并且經常需要 O(n) 的時間復雜度才能在單個鏈表中找到某個元素。

這篇文章

(https://javarevisited.blogspot.com/2013/07/difference-between-array-and-linked-list-java.html)提供了更多關于數組和鏈表數據結構之間差異的信息。

鏈表還有多種變體,如單鏈表,即允許在一個方向(正向或反向)上遍歷;雙鏈表則允許你在兩個方向(向前或向后)遍歷;***是循環鏈表,它形成一個循環。

要解決關于鏈表的問題,掌握遞歸知識很重要,因為鏈表是遞歸數據結構。

如果你從鏈表中取出一個節點,剩下的數據結構仍然是鏈表,因此,許多鏈表問題的遞歸解比迭代解更簡單。

以下是關于鏈表的一些常見問題和解決方案:

(9) 如何在一次傳遞中找到單鏈表的中間元素?

  • 解決方案:http://javarevisited.blogspot.sg/2012/12/how-to-find-middle-element-of-linked-list-one-pass.html

(10) 如何檢查給定的鏈表是否包含循環?如何找到循環的起始節點?

  • 解決方案:http://javarevisited.blogspot.sg/2013/05/find-if-linked-list-contains-loops-cycle-cyclic-circular-check.html

(11) 如何反轉鏈表?

  • 解決方案:http://www.java67.com/2016/07/how-to-reverse-singly-linked-list-in-java-example.html

(12) 在沒有遞歸的情況下如何反轉單鏈表?

  • 解決方案:http://javarevisited.blogspot.sg/2017/03/how-to-reverse-linked-list-in-java-using-iteration-and-recursion.html

(13) 如何刪除亂序鏈表中的重復節點?

  • 解決方案:https://www.geeksforgeeks.org/remove-duplicates-from-an-unsorted-linked-list/

(14) 如何測量單鏈表的長度?

  • 解決方案:http://javarevisited.blogspot.sg/2016/05/how-do-you-find-length-of-singly-linked.html

(15) 如何從單鏈表的末端找出第三個節點?

  • 解決方案:http://javarevisited.blogspot.sg/2016/07/how-to-find-3rd-element-from-end-in-linked-list-java.html

(16) 如何使用堆棧算出兩個鏈表的總和?

  • 解決方案:https://www.geeksforgeeks.org/sum-of-two-linked-lists/

這些問題有助于你發展解決問題的技能,并提升你對鏈表數據結構的了解。目前有非常多的資源可以幫助我們理解鏈表,例如在 GitHub 上一個交互式的編碼實踐中,它使用 Jupyter Notebook 提供了數據結構與算法的各種練習,其中就包括了很多鏈表問題及實踐。

項目地址:https://github.com/donnemartin/interactive-coding-challenges

[[245042]]

3. 字符串編碼面試問題

除了數組和鏈表數據結構,字符串也是編程工作面試中的另一熱點話題。我參加過的編碼面試基本都問過關于字符串的問題。

如果你了解數組,那么你就能輕易地解決基于字符串的問題,因為字符串就是字符數組。因此,你通過解決數組編程問題學到的所有技巧,也能用來解決字符串編程問題。

以下是編程工作面試中常問的字符串編程問題列表:

(17) 如何打印字符串中重復的字符?

  • 解決方案:http://java67.blogspot.sg/2014/03/how-to-find-duplicate-characters-in-String-Java-program.html

(18) 如何檢查兩個字符串是否互為逆序?

  • 解決方案:http://javarevisited.blogspot.sg/2013/03/Anagram-how-to-check-if-two-string-are-anagrams-example-tutorial.html

(19) 如何打印字符串中***非重復字符?

  • 解決方案:http://javarevisited.blogspot.sg/2014/03/3-ways-to-find-first-non-repeated-character-String-programming-problem.html

(20) 如何使用遞歸反轉給定字符串?

  • 解決方案:http://javarevisited.blogspot.sg/2012/01/how-to-reverse-string-in-java-using.html

(21) 如何檢查一個字符串是否僅包含數字?

  • 解決方案:http://javarevisited.blogspot.sg/2012/10/regular-expression-example-in-java-to-check-String-number.html

(22) 如何搜索字符串中的重復字符?

  • 解決方案:http://java67.blogspot.sg/2014/03/how-to-find-duplicate-characters-in-String-Java-program.html

(23) 給定一個字符串,如何統計元音數和輔音數?

  • 解決方案:http://java67.blogspot.sg/2013/11/how-to-count-vowels-and-consonants-in-Java-String-word.html

(24) 給定一個字符,如同計算它在字符串中出現的次數?

  • 解決方案:http://javarevisited.blogspot.sg/2012/12/how-to-count-occurrence-of-character-in-String.html

(25) 如何搜索一個字符串的所有排列情況?

  • 解決方案:http://javarevisited.blogspot.com/2015/08/how-to-find-all-permutations-of-string-java-example.html

(26) 在不使用任何庫的情況下,如何反轉給定句子中的單詞?

  • 解決方案:http://java67.blogspot.com/2015/06/how-to-reverse-words-in-string-java.html

(27) 如何檢查兩個字符串是不是互為旋轉(rotation)?

  • 解決方案:http://www.java67.com/2017/07/string-rotation-in-java-write-program.html

(28) 給定一個字符串,如何檢查它是不是回文結構?

  • 解決方案:http://java67.blogspot.com/2015/06/how-to-check-is-string-is-palindrome-in.html

這些問題可以提升你對字符串數據結構的了解。如果你能獨立解決所有這些字符串問題,說明你的狀態很好。

如果想深入了解一些更復雜的問題,我推薦你去看 Steven Skiena 的《The Algorithm Design Manual》,這本書里有最難的算法問題。

網上也有該書的 PDF 版,下載地址:

http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.471.4772&rep=rep1&type=pdf

如果你需要更多的練習,這里還有另外 20 個關于字符串編程的問題:

http://javarevisited.blogspot.sg/2015/01/top-20-string-coding-interview-question-programming-interview.html

4. 二叉樹編程面試問題

現在我們只了解了線性數據結構方面的問題,但是真實世界中的所有信息不可能全是線性的,這就需要樹數據結構了。

樹數據結構允許以層級形式存儲數據。根據存儲數據的方式,有多種樹類型,如二叉樹。

和它的近親二叉搜索樹一樣,它也是***的樹數據結構之一。因此,你會看到很多相關的有趣問題。例如,如何遍歷樹、計算節點數量、找出深度,以及檢查是否平衡。

解決二叉樹問題的關鍵在于深厚的理論知識,如二叉樹的大小或深度、什么是葉節點、什么是節點,以及了解流行的遍歷算法。

以下是軟件工程師或開發工作面試中常見的二叉樹相關編程問題:

(29) 如何實現二叉搜索樹?

  • 解決方案:http://javarevisited.blogspot.sg/2015/10/how-to-implement-binary-search-tree-in-java-example.html#axzz4wnEtnNB3

(30) 如何對給定二叉樹執行前序遍歷?

  • 解決方案:http://javarevisited.blogspot.sg/2016/07/binary-tree-preorder-traversal-in-java-using-recursion-iteration-example.html#axzz***rdIFI7y

(31) 如何在沒有遞歸的情況下對給定二叉樹執行前序遍歷?

  • 解決方案:http://www.java67.com/2016/07/binary-tree-preorder-traversal-in-java-without-recursion.html

(32) 如何對給定二叉樹執行中序遍歷?

  • 解決方案:http://www.java67.com/2016/08/binary-tree-inorder-traversal-in-java.html

(33) 如何在沒有遞歸的情況下通過對給定二叉樹執行中序遍歷來打印所有節點?

  • 解決方案:http://www.java67.com/2016/08/binary-tree-inorder-traversal-in-java.html

(34) 如何實現后序遍歷算法?

  • 解決方案:http://www.java67.com/2016/10/binary-tree-post-order-traversal-in.html

(35) 如何在沒有遞歸的情況下對給定二叉樹執行后序遍歷?

  • 解決方案:http://www.java67.com/2017/05/binary-tree-post-order-traversal-in-java-without-recursion.html

(36) 如何打印二叉搜索樹的所有葉節點?

  • 解決方案:http://www.java67.com/2016/09/how-to-print-all-leaf-nodes-of-binary-tree-in-java.html

(37) 如何計算給定二叉樹中葉節點的數量?

  • 解決方案:http://javarevisited.blogspot.sg/2016/12/how-to-count-number-of-leaf-nodes-in-java-recursive-iterative-algorithm.html

(38) 如何在給定數組中執行二元搜索?

  • 解決方案:http://javarevisited.blogspot.sg/2015/10/how-to-implement-binary-search-tree-in-java-example.html#axzz4wnEtnNB3

如果你認為自己對二叉樹編程的了解不足,無法解決這些問題,我建議你先熟練掌握數據結構和算法知識,比如你可以上這門課《From 0 to 1: Data Structures & Algorithms in Java》。同樣,你也可以查閱準備 Google 面試的一套完整手冊,這套 GitHub 手冊前面已經介紹了,但它在二叉樹等數據結構上真的有非常多的案例與教程。

項目地址:https://github.com/jwasham/coding-interview-university

[[245043]]

如果你需要更多推薦,可以參考:

  • http://javarevisited.blogspot.sg/2015/07/5-data-structure-and-algorithm-books-best-must-read.html
  • http://javarevisited.blogspot.sg/2018/01/top-5-free-data-structure-and-algorithm-courses-java—c-programmers.html

5. 其它編程面試問題

除了數據結構方面的問題,大部分編程工作面試也會問關于算法、設計、位運算和通用的邏輯問題。

針對性練習很重要,因為有時在實際面試中它們會有點難解。事先練習不僅能夠讓你熟悉這些問題,還能讓你在向面試官解釋答案時更加自信。

(39) 如何實現冒泡排序算法(bubble sort algorithm)?

  • 解決方案:http://javarevisited.blogspot.sg/2014/08/bubble-sort-algorithm-in-java-with.html#axzz***rdIFI7y

(40) 如何實現迭代快速排序算法(iterative quicksort algorithm)?

  • 解決方案:http://javarevisited.blogspot.sg/2016/09/iterative-quicksort-example-in-java-without-recursion.html#axzz***rdIFI7y

(41) 如何實現插入排序算法(insertion sort algorithm)?

  • 解決方案:http://www.java67.com/2014/09/insertion-sort-in-java-with-example.html

(42) 如何實現歸并排序算法(merge sort algorithm)?

  • 解決方案:http://www.java67.com/2018/03/mergesort-in-java-algorithm-example-and.html

(43) 如何實現桶排序算法(bucket sort algorithm)?

  • 解決方案:http://javarevisited.blogspot.sg/2017/01/bucket-sort-in-java-with-example.html

(44) 如何實現計數排序算法(counting sort algorithm)?

  • 解決方案:http://www.java67.com/2017/06/counting-sort-in-java-example.html

(45) 如何實現基數排序算法(radix sort algorithm)?

  • 解決方案:http://www.java67.com/2018/03/how-to-implement-radix-sort-in-java.html

(46) 如何在不使用第三個變量的前提下交換兩個數字?

  • 解決方案:http://www.java67.com/2015/08/how-to-swap-two-integers-without-using.html

(47) 如何確認兩個矩形是否重疊?

  • 解決方案:http://javarevisited.blogspot.sg/2016/10/how-to-check-if-two-rectangle-overlap-in-java-algorithm.html

(48) 如何設計自動販賣機?

  • 解決方案:http://javarevisited.blogspot.sg/2016/06/design-vending-machine-in-java.html

如果你想查看更多此類編程問題,可以閱讀這本書《Cracking the Coding Interview: 189 Programming Questions and Solutions》,適合短時間內準備編程工作面試。

下載地址:http://lib1.org/_ads/fcb49f53d5e943ce8acdc4469f63dc5d

你練習的問題越多,準備就越充分。因此,如果你認為 48 道題不夠的話,可以查看:

  • https://javarevisited.blogspot.com/2015/02/50-programmer-phone-interview-questions-answers.html
  • http://javarevisited.blogspot.sg/2016/06/top-5-books-for-programming-coding-interviews-best.html
  • http://javarevisited.blogspot.sg/2018/02/10-courses-to-prepare-for-programming-job-interviews.html

現在你已經準備好面試了

這部分將介紹一些數據結構和算法之外的常見問題,可以幫助你在面試中取得更好的表現。

我的博客中還有很多此類問題,詳見:http://www.java67.com/

這些常見的編程、數據結構和算法問題是你去任何一家公司面試都必須知道的,不管是大公司還是小公司,不管面試的職位高或低。

如果你正在尋找編程或軟件開發工作,那么你可以先使用這些編程問題開始準備。該列表提供了一些不錯的面試準備話題,能夠幫助你評估自己的面試準備工作是否充分。

熟練掌握數據結構和算法知識是編程工作面試成功的關鍵,你應該更多地關注這些問題。

擴展閱讀:

  • Data Structures and Algorithms: Deep Dive Using Java:https://click.linksynergy.com/fs-bin/click?id=JVFxdTr9V80&subid=0&offerid=323058.1&type=10&tmpid=14538&RD_PARM1=https%3A%2F%2Fwww.udemy.com%2Fdata-structures-and-algorithms-deep-dive-using-java%2F
  • 10 Books to Prepare Technical Programming/Coding Job Interviews:http://www.java67.com/2017/06/10-books-to-prepare-technical-coding-job-interviews.html
  • 10 Algorithm Books Every Programmer Should Read:http://www.java67.com/2015/09/top-10-algorithm-books-every-programmer-read-learn.html
  • Top 5 Data Structure and Algorithm Books for Java Developers:http://javarevisited.blogspot.sg/2016/05/5-free-data-structure-and-algorithm-books-in-java.html#axzz4uXETWjmV
  • From 0 to 1: Data Structures & Algorithms in Java:https://click.linksynergy.com/fs-bin/click?id=JVFxdTr9V80&subid=0&offerid=323058.1&type=10&tmpid=14538&RD_PARM1=https%3A%2F%2Fwww.udemy.com%2Ffrom-0-to-1-data-structures%2F
  • Data Structure and Algorithms Analysis—Job Interview:https://click.linksynergy.com/fs-bin/click?id=JVFxdTr9V80&subid=0&offerid=323058.1&type=10&tmpid=14538&RD_PARM1=https%3A%2F%2Fwww.udemy.com%2Fdata-structure-and-algorithms-analysis%2F

原文鏈接:

https://hackernoon.com/50-data-structure-and-algorithms-interview-questions-for-programmers-b4b1ac61f5b0

【本文是51CTO專欄機構“機器之心”的原創譯文,微信公眾號“機器之心( id: almosthuman2014)”】

戳這里,看該作者更多好文

責任編輯:趙寧寧 來源: 51CTO專欄
相關推薦

2020-04-27 07:05:58

二叉樹左子樹右子樹

2021-09-29 10:19:00

算法平衡二叉樹

2020-09-23 18:25:40

算法二叉樹多叉樹

2021-04-28 20:12:27

數據結構創建

2013-07-15 16:35:55

二叉樹迭代器

2021-03-17 08:19:22

二叉樹LeetCode

2021-04-20 08:37:14

數據結構二叉樹

2021-04-19 07:47:42

數據結構二叉樹Tree

2021-08-27 11:36:44

二叉樹回溯節點

2021-03-22 08:23:29

LeetCode二叉樹節點

2023-05-08 15:57:16

二叉樹數據結構

2022-10-26 23:58:02

二叉樹數組算法

2021-05-06 17:46:30

二叉樹數據結構

2023-05-10 08:41:40

二叉樹遍歷算法

2019-08-22 09:22:44

數據結構二叉搜索樹

2021-09-15 07:56:32

二叉樹層次遍歷

2021-12-17 14:26:58

二叉樹節點數量

2021-07-13 14:03:24

二叉樹滿二叉樹完全二叉樹

2021-10-12 09:25:11

二叉樹樹形結構

2012-09-29 10:54:10

程序員謊話Quora
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 成人av片在线观看 | 中文字幕日韩欧美 | 色久在线 | 日本 欧美 国产 | 免费艹逼视频 | 国产国产精品 | 狠狠操狠狠操 | 青青草一区| 久久精品亚洲欧美日韩久久 | 久久一二区| 中文字幕视频在线观看 | 99精品免费 | 亚洲成人网在线 | 黄a在线播放 | 日韩av一区二区在线观看 | 二区在线视频 | 国产精品99久久久久久人 | 91视频网 | 久久99精品久久久久久 | 欧美另类视频 | 一区二区三区四区在线视频 | 国产91在线播放 | 亚洲在线一区二区三区 | 欧美日韩亚洲视频 | 国产综合久久久久久鬼色 | 羞羞视频网 | 中文字幕久久精品 | 国产精品色av | 色爱综合网| 911网站大全在线观看 | 中文字幕乱码亚洲精品一区 | 国产成人av免费看 | 亚洲精品9999 | 欧美日韩综合视频 | 美女啪啪国产 | 国产精品福利在线 | 中文字幕亚洲区一区二 | 国产视频久久 | 国产毛片在线看 | 日韩三级视频 | 久久高清 |