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;
        }
    }

}

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

时间: 2024-10-15 01:19:50

44、扑克牌中的顺子的相关文章

如何在JS中计算扑克牌中的顺子、对子、半顺、豹子、杂六

1 <!DOCTYPE html> 2 <html> 3 <head> 4 <title>如何计算扑克牌中的顺子.对子.半顺.豹子.杂六</title> 5 <meta charset="utf-8"/> 6 </head> 7 <body> 8 号码1:<input type="number" value="5" id="num1&q

算法题7 判断扑克牌中的顺子

题目: 来源 http://www.cnblogs.com/python27/archive/2011/11/27/2264405.html 随机抽取扑克牌中的n张牌,判断是不是顺子,即这5张牌是不是连续的.其中A看成1,J看成11,Q看成12,K看成13,大小王可以看成任何需要的数字. 分析: 对于扑克牌来说,数字范围是很明确的,1到K外加大小王(设定为M).假如这副牌是个顺子,也就是每张牌都不相同,那么利用一个大小为14的辅助数组counts[]就可以快速的实现排序,记录每张牌出现的次数,然

【剑指offer】61、扑克牌中的顺子

题目 从扑克牌中随机抽5张牌,判断是不是一个顺子.2~10为本身,A是1,J,Q,K分别是11,12,13.大小王百搭 思路 关键就是大小王百搭.把大小王都当作0. 我们先统计出数组中0的个数 然后将数组排序,统计不连续的空缺总数 最后判断0的个数是否比空缺总数大 class Solution { public: bool IsContinuous( vector<int> numbers ) { if (numbers.size() != 5 ) return false; int leng

面试题61:扑克牌中的顺子

1.题目描述: LL今天心情特别好,因为他去买了一副扑克牌,发现里面居然有2个大王,2个小王(一副牌原本是54张^_^)...他随机从中抽出了5张牌,想测测自己的手气,看看能不能抽到顺子,如果抽到的话,他决定去买体育彩票,嘿嘿!!“红心A,黑桃3,小王,大王,方片5”,“Oh My God!”不是顺子.....LL不高兴了,他想了想,决定大\小 王可以看成任何数字,并且A看作1,J为11,Q为12,K为13.上面的5张牌就可以变成“1,2,3,4,5”(大小王分别看作2和4),“So Lucky

剑指offer (44) 扑克牌的顺子

题目:从扑克牌中随机抽取5张牌,判断是不是一个顺子,即这5张牌是不是连续的 2-10为数字本身,A为1,J为11,Q为12,K为13,大小王可以替换任意数字 题解分析: step1. 首先大小王看作0,与其他数字都区分开 step2. 对这5张牌排序 step3. 统计5张牌中0的个数和 相邻数字之间的空缺总数,因为 我们可以把0替换掉空缺所需的数 bool IsContinuous(std::vector<int>& num) { if (num.size() != 5) retur

61-扑克牌中的顺子

题目:从扑克牌中随机抽5张牌,判断是不是一个顺子,即这5张牌是不是连续的. def is_continous(arrys): cnt_0 = arrys.count(0) res = sorted(arrys) i,length = cnt_0,len(res) cnt = 0 while i<length-1: if res[i+1]-res[i]==0: return False if res[i+1]-res[i]>1: cnt = cnt+res[i+1]-res[i]-1 i +=

c编程:求出4&#215;4矩阵中最大和最小元素值及其所在行下标和列下标,求出两条主对角线元素之和。

//求出4×4矩阵中最大和最小元素值及其所在行下标和列下标,求出两条主对角线元素之和 #include <stdio.h> int main() { int sum=0; int max,min; int max1,max2;//记录最大值的坐标 int min1,min2;//记录最小值的坐标 int i,j; int a[4][4]; //为数组赋值 for(i=0;i<4;i++) { for(j=0;j<4;j++) { scanf("%d",&

44.扑克牌的顺子

把5张牌看成由5个数字组成的数组.大小王定义为0. bool IsContinuous(int* numbers, int length) { if (numbers == NULL || length < 1) return false; qsort(numbers, length, sizeof(int), compare); int numberOfZero = 0; int numberOfGap = 0; //统计数组中0的个数 for (int i = 0; i < length&

python进阶四(类的继承)【4-4 python中多重继承】

python中多重继承 除了从一个父类继承外,Python允许从多个父类继承,称为多重继承. 多重继承的继承链就不是一棵树了,它像这样: 1 class A(object): 2 def __init__(self, a): 3 print 'init A...' 4 self.a = a 5 6 class B(A): 7 def __init__(self, a): 8 super(B, self).__init__(a) 9 print 'init B...' 10 11 class C(