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

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

.net pac mil ace height 數字 emp sco 目錄

【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,嚴格來說應該做判斷

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