劍指Offer學習 面試題44 撲克牌的順子

2021-10-03 05:01:56 字數 615 閱讀 2670

總體思路;

快拍-》判斷0的個數;從第乙個非0位置。兩個差1index快慢指標,統計快慢指標位置是否是同樣元素,如果是那麼不是順子,如果不是那麼統計快指標和慢指標斷層的和【也就是相差大於1】,最後對比0的個數是否大於等於斷層的數字。

我們可以把5張牌看成由5個數字組成的陣列。大、小王是特殊的數字,我們不妨把它們都定義為0,這樣就能和其他撲克牌區分開來了。

接下來我們分析怎樣判斷5個數字是不是連續的,最直觀的方法是把陣列排序。值得注意的是,由於0可以當成任意數字,我們可以用0去補滿陣列中的空缺。如果排序之後的陣列不是連續的,即相鄰的兩個數字相隔若干個數字,但只要我們有足夠的。可以補滿這兩個數字的空缺,這個陣列實際上還是連續的。舉個例子,陣列排序之後為在1和3之間空缺了乙個2,剛好我們有乙個0,也就是我們可以把它當成2去填補這個空缺。

於是我們需要做3 件事情: 首先把陣列排序,再統計陣列中0 的個數,最後統計排序之後的陣列中相鄰數字之間的空缺總數。如果空缺的總數小於或者等於0 的個數,那麼這個陣列就是連續的:反之則不連續。

最後,我們還需要注意一點: 如果陣列中的非0 數字重複出現,則該陣列不是連續的。換成撲克牌的描述方式就是如果一副牌裡含有對子,則不可能是順子。

劍指offer面試題7

面試題7 用兩個棧實現佇列 using namespace std template class cqueue 預備知識 佇列 佇列也是一種常見的資料結構 特點是先進先出 fifo 在stl中有stack和queue兩個容器 template class stack 成員函式 empty size ...

劍指offer面試題11

面試題1 數值的整數的次方 題目 實現函式double power double base,int exponent 求base的 exponent次方。不得使用庫函式,同時不需要考慮大數問題。思路 首先應該明確指數的可能取值 正整數,0,負整數 另外還需要考慮底數是0的情形。對於負整指數,我們可以...

劍指offer面試題15

面試題15 鍊錶中倒數第k個結點 題目 輸入乙個鍊錶,輸出該鍊錶中倒數第k個結點。為了符合大多數人的習慣,本題從1開始計數,即鍊錶的尾結點是倒數第乙個結點。例如乙個鍊錶有6個結點,從頭結點開始它們的值依次是1 2 3 4 5 6。這個鍊錶的倒數第3個結點是值為4的結點。預備知識 鍊錶結點的定義如下 ...