算法学习之扑克牌中的顺子

题目:从扑克牌中随机抽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

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