NC63. 扑克牌顺子
描述
输入描述
输入五张扑克牌的值输出描述
五张扑克牌能否组成顺子。示例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; } };