扑克牌顺子-不用排序,只需要boolean[5]很小的内存空间,遍历一次数组即可

扑克牌顺子

http://www.nowcoder.com/questionTerminal/762836f4d43d43ca9deb273b3de8e1f4

//解题思路
/*
array数组解释:数组索引表示顺子的第几张牌,如array[1] = true表示顺子的第二张牌找到了
遍历所有数字:
1.数字为0则king++,如果king > 3直接返回true,因为有4或5个王一定能组成顺子
2.数字不为0
    2.1先执行array[number % 5] == true,判断这张牌是否已经找到了或两张牌是否相差5
        2.1.1是则直接返回false,因为有重复的牌或者存在两张相差5的牌都不可能组成顺子
        2.1.2否则执行array[number % 5] = true表示找到了顺子的其中一张牌,缺牌数lack--
    2.2统计最大值max和最小值min,如果max - min > 4直接返回false,因为顺子的第一张牌和最后一张牌一定不会大于4
3.如果王牌数king等于缺牌数lack则返回true,否则返回false
 */
public boolean IsContinuous(int [] numbers) {
    int king = 0;//记录王牌的个数
    int lack = 5;//记录缺少的牌数
    int min = 14;
    int max = 0;
    boolean[] array = new boolean[5];
    for (int number : numbers) {
        if (number == 0) {
            king++;
            if (king > 3) return true;//有4或5个王一定能组成顺子
        }
        else {
            if (array[number % 5] == true) return false;//有重复的牌
            else{
                array[number % 5] = true;
                lack--;
            }
            if (number < min) min = number;
            else if (number > max) max = number;
            if (max - min > 4) return false;
        }
    }
    if (lack != king) return false;
    return true;
}
全部评论

相关推荐

牛客5655:其他公司的面试(事)吗
点赞 评论 收藏
分享
我即大橘:耐泡王
点赞 评论 收藏
分享
2 收藏 评论
分享
牛客网
牛客企业服务