日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

算法和编程面试题精选 TOP50!(附代码+解题思路+答案)

發(fā)布時間:2024/1/17 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 算法和编程面试题精选 TOP50!(附代码+解题思路+答案) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

本篇文章的面試資源,主要包含五部分內(nèi)容:數(shù)組、鏈表、字符串、二叉樹和重要算法(如排序算法)的編程面試題,其中每部分內(nèi)容,都列出了一些最常被問到的熱門問題。并且在每個題目后,給出了可以參考的解決思路和代碼。因為題目較多,我們沒有羅列所有的方法和代碼,只給出了訪問地址。相信大家在掌握了這些內(nèi)容后,一定可以提升實力、信心大增。

作者 | javinpaul

出品 | AI科技大本營

?

數(shù)組

數(shù)組,將元素存儲到內(nèi)存的連續(xù)位置中,是最基本的數(shù)據(jù)結(jié)構(gòu)。在任何和編程相關(guān)的面試中,都會被問到和數(shù)組相關(guān)的問題,可以說是非常熱門的考題之一。比如:將數(shù)組反轉(zhuǎn)、對數(shù)組進行排序、搜索數(shù)組中的元素等。

數(shù)組數(shù)據(jù)結(jié)構(gòu)的主要優(yōu)點是如果知道索引就可以通過 O(l) 進行快速搜索,但是在數(shù)組中添加和刪除元素的速度會很慢,因為數(shù)組一旦被創(chuàng)建,就無法更改其大小。如果需要創(chuàng)建更長或更短的數(shù)組,得先創(chuàng)建一個新數(shù)組,再把原數(shù)組中的所有元素復制到新創(chuàng)建的數(shù)組中。

解決數(shù)組相關(guān)問題的關(guān)鍵是要熟悉數(shù)組的數(shù)據(jù)結(jié)構(gòu)和基本的構(gòu)造,如循環(huán)、遞歸等等;下面給出了 10 道熱門面試題幫助大家掌握知識并進行練習。

1.給定一個 1-100 的整數(shù)數(shù)組,請找到其中缺少的數(shù)字。

解決方法與代碼:

https://javarevisited.blogspot.com/2014/11/how-to-find-missing-number-on-integer-array-java.html

2.請在給出的整數(shù)數(shù)組中找到重復的數(shù)字。

解決方法與代碼:

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

3.如何在未排序的整數(shù)數(shù)組中找到最大值與最小值?

解決方法與代碼:

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

4.在給定的成對整數(shù)數(shù)組中,請找出所有總和等于給定數(shù)字的組合。

解決方法與代碼:

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

5.如果數(shù)組中有多個重復項,如何找到重復的數(shù)字?

解決方法與代碼:

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

6.用 Java 語言實現(xiàn),在給出的數(shù)組中,刪除重復項。

解決方法與代碼:

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

7.用 quicksort 算法實現(xiàn)對整數(shù)數(shù)組的排序。

解決方法和代碼:

http://javarevisited.blogspot.com/2014/08/quicksort-sorting-algorithm-in-java-in-place-example.html

8.如何刪除現(xiàn)有數(shù)組中的重復項?

解決方法和代碼:

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

9.用 Java 語言把數(shù)組進行反轉(zhuǎn)。

解決方法和代碼:

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

10.如何在不調(diào)用庫的情況下刪除數(shù)組中的重復項?

解決方法和代碼:

http://javarevisited.blogspot.sg/2014/01/how-to-remove-duplicates-from-array-java-without-collection-API.html

十個問題太少?更多復雜問題,可訪問:http://javarevisited.blogspot.sg/2015/06/top-20-array-interview-questions-and-answers.html

?

鏈表

?

鏈表是另一種常見的數(shù)據(jù)結(jié)構(gòu),和數(shù)組相似,鏈表也是線性的數(shù)據(jù)結(jié)構(gòu)并且以線性方式存儲元素。而與數(shù)組不同的是,鏈表不是將元素存儲在連續(xù)的位置中,而是可以存儲在任意位置,彼此之間通過節(jié)點相互連接。

鏈表也可以說就是一個節(jié)點列表,每個節(jié)點中包含存儲的值和下一個節(jié)點的地址。也正是因為這種結(jié)構(gòu),在鏈表里添加和刪除元素很容易,你只需要更改鏈接而不用創(chuàng)建新的數(shù)組。但是搜索會很困難,并且在單鏈表中找到一個元素就需要 O(n)個時間。

鏈表有多種形式,如:單鏈表,允許你在一個方向上進行遍歷;雙鏈表,可以在兩個方向上進行遍歷;循環(huán)鏈表,最后節(jié)點的指針指向第一個節(jié)點從而形成一個環(huán)形的鏈;因為鏈表是一種遞歸數(shù)據(jù)結(jié)構(gòu),所以在解決鏈表問題時,熟練掌握遞歸算法就顯得更加重要了。

下面是關(guān)于鏈表的一些最常見、熱門的面試問題,大家可以著重練習:

1.如何在一次遞歸后找到單鏈表的中間元素?

解決方法和代碼:

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

2.檢查給定的鏈表中是否包含循環(huán)鏈表,并找出循環(huán)鏈表的起始節(jié)點。

解決方法和代碼:

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

3.如何將列表反轉(zhuǎn)(倒置)?

解決方法和代碼:

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

4.如何在沒有遞歸的情況下反轉(zhuǎn)單鏈表?

解決方法和代碼:

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

5.刪除未經(jīng)過排序的鏈表中重復的節(jié)點。

解決方法和代碼:

https://www.geeksforgeeks.org/remove-duplicates-from-an-unsorted-linked-list/

6.計算單鏈表的長度。

解決方法和代碼:

http://javarevisited.blogspot.sg/2016/05/how-do-you-find-length-of-singly-linked.html

7.找出單鏈表中倒數(shù)第三個節(jié)點。

解決方法和代碼:

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

8.如何使用 Stack 查找兩個鏈表的和?

解決方法和代碼:

https://www.geeksforgeeks.org/sum-of-two-linked-lists/

這些問題可以幫你提升解決問題的能力,加深對鏈表數(shù)據(jù)結(jié)構(gòu)的了解。

關(guān)于數(shù)組和鏈表間的區(qū)別,可詳細閱讀:

http://javarevisited.blogspot.sg/2013/07/difference-between-array-and-linked-list-java.html

更多復雜問題,可訪問:

http://javarevisited.blogspot.sg/2017/07/top-10-linked-list-coding-questions-and.html

?

字符串

?

除了數(shù)組和鏈表數(shù)據(jù)結(jié)構(gòu),字符串是應聘過程中編程面試的另一個熱門問題。在我參加過的編程面試中,每一個都涉及了有關(guān)字符串的問題。

值得慶幸的是,如果你了解數(shù)組,你可以很容易解決關(guān)于字符串的問題,因為字符串本身就是一個由字符組成的數(shù)組。

因此,你學過的所有用來解決數(shù)組編程問題的知識,也可以用來解決字符串的編程問題。

以下是一些在編程面試中高頻出現(xiàn)的字符串問題:

1.如何輸出字符串中重復的字符?

解決方法與代碼:

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

2.如何判斷兩個字符串是否互為回文?

解決方法與代碼:

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

3.如何找出字符串首個非重復的字符?

解決方法與代碼:

https://javarevisited.blogspot.com/2014/03/3-ways-to-find-first-non-repeated-character-String-programming-problem.html

4.如何用遞歸的方法將字符串進行反轉(zhuǎn)?

解決方法與代碼:

https://javarevisited.blogspot.com/2012/01/how-to-reverse-string-in-java-using.html

5.如何判斷一個字符串是否只包含數(shù)字?

解決方法與代碼:

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

6.如何找到字符串中重復的字符?

解決方法與代碼:

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

7.如何計算一個字符串中元音字母和輔音字母的個數(shù)?

解決方法與代碼:

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

8.如何計算一個給定字符在字符串中出現(xiàn)的次數(shù)?

解決方法與代碼:

https://javarevisited.blogspot.com/2012/12/how-to-count-occurrence-of-character-in-String.html

9.如何找出一個字符串的所有排列組合?

解決方法與代碼:

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

10.在不使用任何方法庫的情況下,如何將一句話中的單詞進行反轉(zhuǎn)?

解決方法與代碼:

http://www.java67.com/2015/06/how-to-reverse-words-in-string-java.html

11.如何判斷一個字符串是否為另一個字符串循環(huán)移動的結(jié)果?

解決方法與代碼:

http://www.java67.com/2017/07/string-rotation-in-java-write-program.html

12.如何判斷一個字符串是否為回文?

解決方法與代碼:

http://java67.blogspot.com/2015/06/how-to-check-is-string-is-palindrome-in.html

這些問題有助于提高你對字符串數(shù)據(jù)結(jié)構(gòu)的理解。如果你在沒有外界幫助的情況下,可以解決所有這些字符串問題,那么你的水平已經(jīng)很棒了。

若想了解更多復雜的問題,建議學習一下《Algorithm Design Manual by Steven Skiena》這本書中的問題,里面大都是難度很高的算法問題。

?

如果你需要更多的練習,可以參考這一組問題,包含20個字符串編程問題。

問題鏈接:https://javarevisited.blogspot.com/2015/01/top-20-string-coding-interview-question-programming-interview.html

?

二叉樹

?

到目前為止,我們只涉及了線性數(shù)據(jù)結(jié)構(gòu),但現(xiàn)實世界的所有信息都不是以線性的形式展現(xiàn)的,因此出現(xiàn)了樹結(jié)構(gòu)。

樹結(jié)構(gòu)是一種將數(shù)據(jù)進行分層存儲的數(shù)據(jù)結(jié)構(gòu)。根據(jù)數(shù)據(jù)存儲方式的不同,存在不同類型的樹,比如二叉樹,其中每個節(jié)點至多有兩個子節(jié)點。

和二叉查找樹一樣,它們都是最流行的樹形式的數(shù)據(jù)結(jié)構(gòu)。因此,你會發(fā)現(xiàn)很多問題基于它們的問題,如計算節(jié)點數(shù),如何進行遍歷,計算深度,判斷它們是否平衡。

解決二叉樹問題的關(guān)鍵是要有扎實的知識理論,如什么是二叉樹的大小或深度,什么是葉,以及什么是節(jié)點。還有對當前流行的遍歷算法的理解,如前序遍歷、后序遍歷和中序遍歷。

下面是一系列常在軟件開發(fā)面試中出現(xiàn)的二叉樹熱門問題:

1.如何部署使用二叉查找樹?

解決方法與代碼:

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

2.給定一個二叉樹,如何進行前序遍歷?

解決方法與代碼:

http://javarevisited.blogspot.sg/2016/07/binary-tree-preorder-traversal-in-java-using-recursion-iteration-example.html#axzz5ArdIFI7y

3.在不使用遞歸的情況下,如何對給定二叉樹進行前序遍歷?

解決方法與代碼:

http://www.java67.com/2016/07/binary-tree-preorder-traversal-in-java-without-recursion.html

4.給定一個二叉樹,如何進行中序遍歷?

解決方法與代碼:

http://www.java67.com/2016/08/binary-tree-inorder-traversal-in-java.html

5.在不使用遞歸的情況下,如何使用中序遍歷輸出給定二叉樹的所有節(jié)點?

解決方法與代碼:

http://www.java67.com/2016/08/binary-tree-inorder-traversal-in-java.html

6.如何實現(xiàn)后序遍歷算法?

解決方法與代碼:

http://www.java67.com/2016/10/binary-tree-post-order-traversal-in.html

7.在不使用遞歸的情況下,如何對二叉樹進行后序遍歷?

解決方法與代碼:

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

8.如何輸出一個二叉查找樹的所有葉子?

解決方法與代碼:

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

9.如何計算一個給定二叉樹的葉子節(jié)點數(shù)目?

解決方法與代碼:

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

10.給定一個數(shù)組,如何對其進行二叉搜索?

解決方法與代碼:

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

如果你覺得自己對二叉樹編程的理解還不夠,無法獨自解決這些問題,我列出了我使用過的書籍:http://javarevisited.blogspot.sg/2015/07/5-data-structure-and-algorithm-books-best-must-read.htmlhttp://javarevisited.blogspot.sg/2018/01/top-5-free-data-structure-and-algorithm-courses-java--c-programmers.html

?

其它算法編程問題

?

除了數(shù)據(jù)結(jié)構(gòu)問題,大多數(shù)編程面試也會問有關(guān)算法、設(shè)計、位操作和一般的邏輯問題,在這部分中我會介紹這些問題。

在實際問題中應用這些概念是十分重要的,因為在面試中它們往往都比較難對付。多加練習不僅可以讓你對這些概念更熟悉,也會讓你在面試過程中更有信心。

1.如何實現(xiàn)冒泡排序算法?

解決方法與代碼:

http://javarevisited.blogspot.sg/2014/08/bubble-sort-algorithm-in-java-with.html#axzz5ArdIFI7y

2.如何用迭代實現(xiàn)快速排序算法?

解決方法與代碼:

http://javarevisited.blogspot.sg/2016/09/iterative-quicksort-example-in-java-without-recursion.html#axzz5ArdIFI7y

3.如何實現(xiàn)插入排序算法?

解決方法與代碼:

http://www.java67.com/2014/09/insertion-sort-in-java-with-example.html

4.如何實現(xiàn)歸并排序算法?

解決方法與代碼:

http://www.java67.com/2018/03/mergesort-in-java-algorithm-example-and.html

5.如何實現(xiàn)桶排序算法?

解決方法與代碼:

https://javarevisited.blogspot.com/2017/01/bucket-sort-in-java-with-example.html

6.如何實現(xiàn)計數(shù)排序算法?

解決方法與代碼:

http://www.java67.com/2017/06/counting-sort-in-java-example.html

7.如何實現(xiàn)基數(shù)排序算法?

解決方法與代碼:

http://www.java67.com/2018/03/how-to-implement-radix-sort-in-java.html

8.在不使用第三個變量的情況下,如何交換兩個數(shù)字的值?

解決方法與代碼:

http://www.java67.com/2015/08/how-to-swap-two-integers-without-using.html

9.如何判斷兩個矩形是否有重疊?

解決方法與代碼:

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

10.如何設(shè)計一個自動販售機?

解決方法與代碼:

https://javarevisited.blogspot.com/2016/06/design-vending-machine-in-java.html

總結(jié)

以上是生活随笔為你收集整理的算法和编程面试题精选 TOP50!(附代码+解题思路+答案)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。