列表

详情


NC63. 扑克牌顺子

描述

现在有2副扑克牌,从扑克牌中随机五张扑克牌,我们需要来判断一下是不是顺子。
有如下规则:
1. A为1,J为11,Q为12,K为13,A不能视为14
2. 大、小王为 0,0可以看作任意牌
3. 如果给出的五张牌能组成顺子(即这五张牌是连续的)就输出true,否则就输出false。
4.数据保证每组5个数字,每组最多含有4个零,数组的数取值为 [0, 13]

要求:空间复杂度 ,时间复杂度 ,本题也有时间复杂度 的解法

输入描述

输入五张扑克牌的值

输出描述

五张扑克牌能否组成顺子。

示例1

输入:

[6,0,2,0,4]

输出:

true

说明:

中间的两个0一个看作3,一个看作5 。即:[6,3,2,5,4] 这样这五张牌在[2,6]区间连续,输出true

示例2

输入:

[0,3,2,6,4]

输出:

true

示例3

输入:

[1,0,0,1,0]

输出:

false

示例4

输入:

[13,12,11,0,1]

输出:

false

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C 解法, 执行用时: 2ms, 内存消耗: 344KB, 提交时间: 2020-11-08

/**
 * 
 * @param numbers int整型一维数组 
 * @param numbersLen int numbers数组长度
 * @return bool布尔型
 */
int IsContinuous(int* numbers, int numbersLen ) {
    // write code here
    if(numbersLen==0){
        return 0;
    }
    
    int a[numbersLen],i,j,zero=0,sum=0,temp;
    for(i=0;i<numbersLen-1;i++){
        for(j=0;j<numbersLen-1-i;j++){
            if(numbers[j]>numbers[j+1]){
               temp = numbers[j];
               numbers[j] = numbers[j+1];
               numbers[j+1] = temp;
        }
    }
}
    
    for(i=0;i<numbersLen;i++){
        j=0;
        if(numbers[i]==0){
            zero++;
            continue;
        }
        if(i!=0 && numbers[i-1]!=0 && numbers[i]!=0){
            if(numbers[i]==numbers[i-1]){
                return 0;
            }
            if((j = numbers[i]-numbers[i-1])>1){
                sum = sum+j-1;
            }
        }
    }
     if(zero>=sum){
            return 1;
        }
    return 0;
}

C 解法, 执行用时: 2ms, 内存消耗: 348KB, 提交时间: 2021-05-28

/**
 *
 * @param numbers int整型一维数组
 * @param numbersLen int numbers数组长度
 * @return bool布尔型
 */
#include<stdbool.h>
#include<stdlib.h>

int cmp(const void *a,const void *b)
{
	return (*(int *)a-*(int *)b);
}

bool IsContinuous(int* numbers, int numbersLen )
{
	// write code here
  //  if(numbersLen!=5)
   //     return NULL;
    qsort(numbers,numbersLen,sizeof(*numbers),cmp);
  //  if(numbers[0]<0||numbers[4]>13||numbers[4]==0)
  //      return NULL;
    int ser_min=0;
    while(numbers[ser_min]==0)
        ser_min++;//此时得到除0外,最小数的下标
    if(numbers[4]-numbers[ser_min]>=5)
        return false;
    int i=ser_min;
    for(;i<=3;i++)
    {
        if(numbers[i]==numbers[i+1])
            return false;
    }
    return true;
}
//思路:除0外,最大值和最小值之间相差不超过5,且不含重复数字

C++ 解法, 执行用时: 2ms, 内存消耗: 356KB, 提交时间: 2021-06-08

class Solution {
public:
    bool IsContinuous( vector<int> numbers ) {
        int my,help;
        sort(numbers.begin(), numbers.end());
        int zero=0;
        int i=0;
        for(int val:numbers)
        {
            if(val==0)
                ++zero;
            else
                break;
            ++i;
        }
        for(int i=zero;i<numbers.size()-1;++i)
        {
            if(numbers[i]==numbers[i+1])
                return false;
        }
        my=numbers[numbers.size()-1]-numbers[zero];
        help=numbers.size()-1-i;
        if(zero>=(my-help)) 
            return true;
        else 
            return false;
        
        
        
    }
};

C++ 解法, 执行用时: 2ms, 内存消耗: 356KB, 提交时间: 2021-06-02

class Solution {
public:
    bool IsContinuous( vector<int> a) {
        int n = a.size();
        if(n != 5) return false;
        sort(a.begin(), a.end());
        int t = 0, i = 0;
        while(i < n && a[i] == 0)
        {
            t++;
            i++;
        }
        for(int j = i; j < n - 1; j ++)
        {
            if(a[j] == a[j + 1]) return false;
        }
        return a[n - 1] - a[i] - (n - i + 1 - 2) <= t ;
    }
};

C++ 解法, 执行用时: 2ms, 内存消耗: 356KB, 提交时间: 2021-05-31

class Solution {
public:
    bool IsContinuous( vector<int> numbers ) {
       bool ret =false;
        if(numbers.empty())
            return ret;
        sort(numbers.begin(),numbers.end());
        for(int i=0;i<numbers.size();i++)
        {
            if(numbers[i]>0)
            {
                if(numbers[i]==numbers[i+1]||numbers.back()-numbers[i]>=5)
                {
                    ret=false;
                    break;
                }
                else
                {
                    ret=true;
                    break;
                }
            }
        }
        return ret;
    }
};

上一题