個人原創,首發於:五分鐘學演算法:畢業十年後,我忍不住出了一份程式設計師的高考試卷
一、選擇題(共計 50 分)
1、在下列四種排序演算法,只有( )是一種不穩定排序
A、氣泡排序
B、選擇排序
C、插入排序
D、歸併排序
2、一個陣列,含有大量重複元素,使用( )進行排序是一種合理的抉擇
A、快速排序
B、雙路快速排序
C、三路快速排序
D、希爾排序
3、楊輝三角,是二項式係數在三角形中的一種幾何排列,在中國南宋數學家楊輝 1261 年所著的( )一書中出現,LeetCode 上第 ( )和( )就是與楊輝三角有關的題目。
A、《詳解八章演算法》、118 、119
B、《詳解九章演算法》、118 、119
C、《詳解八章演算法》、139 、140
D、《詳解九章演算法》、139 、140
4、小吳想執行某項破壞性的操作,比如快速刪除系統元素,使用( )方式可以幫助我更好的完成這個任務
A、二叉樹的前序遍歷
B、二叉樹的中序遍歷
C、二叉樹的後序遍歷
D、二叉樹的層序遍歷
5、在《演算法導論》第二版第 7 章(快速排序)的思考題(第 95 頁)中提及到一種低效的遞迴排序演算法, Howard、Fine 等教授將這個演算法稱為 ( )
A、垃圾排序
B、完美排序
C、變種快速排序
C、HF 排序
6、(多選)如果程式設計師小吳將下面這張圖裡面的文章寫完,將會 ( )
A、收到律師函
B、學會打籃球
C、學會 RAP
D、文章閱讀十萬加
7、下列哪個短語縮寫不是程式設計師常見某些演算法的簡稱()
A、KMP
B、MMP
C、DP
D、A*
8、有一種玻璃杯質量確定但未知,需要檢測。現在有一棟 100 層的大樓,該種玻璃杯從某一層樓扔下,剛好會碎。現給你兩個杯子,問怎樣檢測出這個杯子的質量,即找到在哪一層樓剛好會碎? 現在有一種解法是從數學方程的角度出發。假設最少嘗試次數為 x ,那麼,第一個杯子必須要從第 x 層扔下,因為:如果碎了,前面還有 x - 1 層樓可以嘗試,如果沒碎,後面還有 x-1 次機會。
-
如果沒碎,第一個杯子,第二次就可以從 x +(x - 1)層進行嘗試,這裡加上 x - 1,是因為當此時,第一個杯子碎了,第二個杯子還有可以從 x + 1 到 ( x + (x - 1) - 1 ) 層進行嘗試,有 x - 2 次機會。
-
如果還沒碎,那第一個杯子,第三次從 x + (x - 1) + (x - 2)層嘗試。不管杯子碎或者沒碎,都有 x - 3 次嘗試機會,依次類推。
那麼經過 x 次的嘗試可以確定最高的樓層為 x + (x - 1) + (x - 2) + … + 1 = x(x+1) / 2 。
請問,x 是多少?
A、2
B、10
C、14
D、25
9、假設你在參加一個春節抽獎遊戲,主持人在三個紅包裡面分別放了 1 塊錢、1 塊錢和 1000 塊錢。你選中哪一個,你就可以領到對應的錢。當你選定一個紅包之後,主持人獨自翻開剩下兩個紅包,然後將有一塊錢的紅包給你看。此時,給你一次機會選另外一個紅包。請問:應不應該換?
A、換
B、不換
C、可以換,但沒必要
D、都可以
10、LeetCode 第 9 號問題是迴文數求解,它有很多種解法,下面動圖的解法屬於( )
A、語文解法
B、數學解法
C、英語解法
D、體育解法
二、填空題(共計 20 分)
11、第一篇二分搜尋論文是 1946 年發表,然而第一個沒有 bug 的二分查詢法卻是在 ( ) 年才出現,中間用了 ( ) 年的時間。
12、我們常說有五大演算法,它們分別是 —— 分治演算法、動態規劃、( )、( )、分支限定。
13、印度數學奇才拉馬努金(Srinivasa Ramanujan)是二十世紀最傳奇的數學家之一,他獨立發現了近 3900 個數學公式和命題,雖然他幾乎沒受過正規的高等數學教育,卻能憑直覺寫出不平凡的定理和公式,且往往被證明是對的,他留給世人的筆記引發了後來的大量研究。
下面這張圖就是他的一項發現。
請問,當 k = 0 時,π 的值為( )
三、程式設計題(共計 30 分)
喜羊羊和灰太狼用幾堆石子在做遊戲。偶數堆石子排成一行,每堆都有正整數顆石子 piles[i] 。遊戲以誰手中的石子最多來決出勝負。石子的總數是奇數,所以沒有平局。喜羊羊和灰太狼輪流進行,喜羊羊先開始。 每回合,玩家從行的開始或結束處取走整堆石頭。 這種情況一直持續到沒有更多的石子堆為止,此時手中石子最多的玩家獲勝。假設喜羊羊和灰太狼都發揮出最佳水平,當喜羊羊贏得比賽時返回 true ,當灰太狼贏得比賽時返回 false 。
現在需要你設計一個演算法,來分析它們的輸贏情況。
要求:請使用盡可能少的程式碼將下列程式碼補充完整,不得超過兩行程式碼。
//@author:程式設計師小吳
class Solution {
public boolean stoneGame(int[] piles) {
//請在這裡將程式碼補充完整
}
}
最終答案請在原文連結裡面獲取。
原文連結:五分鐘學演算法:畢業十年後,我忍不住出了一份程式設計師的高考試卷