開始行動,你已經成功一半了,獻給正在奮鬥的我們
從撲克牌中隨機抽5張牌,判斷是不是乙個順子,即這5張牌是不是連續的。且大小王能夠當做任意一張牌。
做這道題,首先我們需要把撲克牌抽象成計算機語言,其中2-10可以用數字2-10來表示。a為1,j為11,q為12,k為13,而大小王為0。
抽象之後,我們可以用一種資料的容器把這5個數字裝起來,這裡選用陣列。
對這個陣列進行排序(當然排序是有時間複雜度的,這裡使用jdk提供的排序方法,時間複雜度為o(nlgn))。
排序之後我們可以對這個陣列進行遍歷,我們需要乙個遍歷的指標point和乙個記錄0的個數的變數kingcount。
當指標指向非0的數字的話,我們就用這個數字後一位的數字減去前一位的數字,在減去1,就是這兩張牌之間有多少張「空牌」,而這些空牌我們可以用王的個數來消耗。
【這裡注意:1)不要角標越界,我們把遍歷的區間定為下角標3,這樣正好能定為到下角標4,也就是5張牌點數最大的那個
2)如果遍歷過程中發現後一張牌和前一張一樣的話,已經不可能構成順子,直接返回false即可】
如果迴圈結束之後,kingcount值依然大於等於0的話,說明我們的牌可以構成順子了。
ps:這裡筆者使用的jdk為1.8版本
public
class
offer61_playingcards))
;}private
static
boolean
playingcards
(int
arr)
arrays.
sort
(arr)
;// 王的數量
int kingcount =0;
// 遍歷陣列的指標
劍指offer 面試題61 撲克牌順子
面試題 劍指offer 題目解答 一副撲克牌,裡面有2個大王,2個小王,隨機從中抽出了5張牌,看看能不能抽到順子,所謂順子就是五個連續的數字,如1,2,3,4,5。為了方便測試其中大 小 王可以看成任何數字,並且a看作1,j為11,q為12,k為13。現在,要求你使用這幅牌模擬上面的過程,如果隨機抽...
面試題61 劍指offer 撲克牌中的順子
題目 從撲克牌中隨機抽5張牌,判斷是不是乙個順子,即這5張牌是不是連續的。其中2 10為數字本身,a為1,j為11,q為12,k為13,而大小王可以看成任意數字。解法 將大小王用0表示,與其他牌區分開 1.先對陣列排序 2.統計0的個數 3.比較陣列要組成順子的差與0個數 param numbers...
劍指Offer 面試題61 撲克牌中的順子
從撲克牌中隨機抽5張牌,判斷是不是乙個順子,即這5張牌是不是連續的。2 10為數字本身,a為1,j為11,q為12,k為13,而大 小王為 0 可以看成任意數字。a 不能視為 14。示例 1 輸入 1,2,3,4,5 輸出 true示例 2 輸入 0,0,1,2,5 輸出 true限制 先統計元素0...