算法學習之撲克牌中的順子

題目:從撲克牌中隨機抽5張牌,判斷是不是一個順子,即這5張牌是不是連續的。2~10爲數字本身,A爲1,J爲11,Q爲12,K爲13,而大、小王可以看成任意數字。爲了方便起見,你可以認爲大小王是0。

思路:五個數滿足下面幾個條件即可(使用TreeSet默認對int實現自動有序排列並且值不能重複)

1、剩餘數字+0的個數=5

2、排序後的最大值-最小值<5 // 注意這裏是大小王除外的即0除外的元素

3、沒有重複數字

import java.util.*;
public class Solution {
    public boolean isContinuous(int [] numbers) {
        if(numbers==null||numbers.length!=5)return false;
        int num = 0;
        TreeSet<Integer> set = new TreeSet<Integer>();
        for(int i =0;i<numbers.length;i++){
            if(numbers[i]==0){
                num++;
            }else{
                set.add(numbers[i]);
            }
        }
        if(num+set.size()!=5){
            return false;
        }
        if((set.last()-set.first())<5){
            return true;
        }
        return false;
        
    }
}

時間複雜度:O(n)

空間複雜度:O(1)

練習地址:https://www.nowcoder.com/practice/762836f4d43d43ca9deb273b3de8e1f4

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章