首页 > 代码库 > 44、扑克牌中的顺子

44、扑克牌中的顺子

思路:将大小王设为0,5个数排序。
1、统计0个数和间隔数,空缺总数小于等于0个数说明连续。
2、且数组不能有相同的数此为对子。排序只有在n很大时才有意义。普通排序即可。
技术分享
import java.util.Arrays;
public class Solution {
    public boolean isContinuous(int [] numbers) {
        //数组不能为空,也不能长度小于5
        if (numbers == null || numbers.length < 5) {
            return false;
        }
        //数组排序,n很小考虑时间复杂度没意义
        Arrays.sort(numbers);
        //统计0的个数
        int zeroCount = 0;
        int gapCount = 0;
        for (int i = 0; i < numbers.length; i++) {
            if (numbers[i] == 0){
                zeroCount++;
            }
        }
        //统计gap个数,并排除数组有重复的数
        //第一个不为0的数
        int small = zeroCount;
        while (small <= numbers.length - 2){
            if (numbers[small] == numbers[small + 1]){
                return false;
            }
            gapCount += (numbers[small + 1] - numbers[small] - 1);
            small++;
        }
        //判断gap和zero关系
        if (gapCount <= zeroCount){
            return true;
        } else {
            return false;
        }
    }
    
    
}
View Code

测试:输入null、抽出的牌有一个或多个大小王,抽出的牌没有大小王,抽出的牌有对子。

44、扑克牌中的顺子