1. 程式人生 > >【LeetCode & 劍指offer刷題】陣列題14:61 撲克牌中的順子

【LeetCode & 劍指offer刷題】陣列題14:61 撲克牌中的順子

【LeetCode & 劍指offer 刷題筆記】目錄(持續更新中...)

61 撲克牌中的順子

從撲克牌中隨機抽 5 張牌,判斷是不是順子,即這 5 張牌是不是連續的。 2-10 為數字本身,A 為 1,J 為 11,Q 為 12,K 為 13,而 大小王可以看成任意的 數字。(大小王最多4張)   思路: 1、首先我們應該關注的是 大小王等特殊字元,由於 可以當成任意的數字,所有當成0處理。 2、把 陣列排序,再統計陣列中0的個數 3、統計排序之後的陣列中 相鄰數字之間的空缺總數
。 4、 陣列中的非0數字重複出現,則該陣列是不連續的。 5、如果 空缺的總數小於或者等於0的個數,那麼 這個陣列就是連續的,反之則不連續   /* 1、排序 2、計算所有相鄰數字間隔總數 3、計算0的個數 4、如果2、3相等,就是順子 5、如果出現對子,則不是順子 */ class Solution { public :    
bool IsContinuous ( vector < int > numbers )     {         if ( numbers . empty ()) return false ;         int
num_of_zero = 0 ;         int num_of_interval = 0 ;                 sort ( numbers . begin (), numbers . end ()); //排序         for ( int i = 0 ; i < numbers . size ()- 1 ; i ++) //注意這裡是0~n-2的範圍,因為後面需要計算a[i+1]         {             //統計癩子數量             if ( numbers [ i ] == 0 )             {                 num_of_zero ++;                 continue ; //繼續迴圈             }             //如果存在對子,直接返回             if ( numbers [ i ] == numbers [ i + 1 ])                 return false ;                         //統計間隔數量             num_of_interval += numbers [ i + 1 ] - numbers [ i ] - 1 ;         }         if ( num_of_zero >= num_of_interval ) return true ;         else return false ;     } }; //10、J、Q、K、A(10 11 12 13 1)本題返回false,嚴格來說應該做判斷