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