考点:本题考查抽象建模能力
题目描述:
从扑克牌中随机抽5张牌,判断是不是一个顺子,即这5张牌是不是连续的。2~10为数字本身,A为1,J为11,Q为12,K为13,而大、小王为 0 ,可以看成任意数字。A 不能视为 14。
输入: [0,0,1,2,5]
输出: True
思路:
数组排序,统计数组中0的个数,统计排序后的数组中相邻数字之间的空缺总数,如果空缺总数小于等于0的个数,那么这个数组就是连续的。
import java.util.Arrays;
public class Solution {
public boolean isContinuous(int [] numbers) {
if(numbers==null||numbers.length<=0)
return false;
Arrays.sort(numbers);
int numberZero = 0;
int numberGap = 0;
//统计数组中0的个数
for(int i=0;i<numbers.length&&numbers[i]==0;i++)
numberZero++;
//统计排序后的数组中相邻数字之间的空缺总数
int small = numberZero;
int big = small + 1;
while(big<numbers.length){
if(numbers[small]==numbers[big])
return false;
numberGap = (numbers[big]-numbers[small]-1)+numberGap;
small = big;
big++;
}
if(numberGap <= numberZero)
return true;
return false;
}
}
排序的时间复杂度为O(nlogn),不够快。但是不同级别的时间复杂度只有当n足够大的时候才有意义,这道题目中数组的长度是固定的,只有五张牌,O(n)和O(nlogn)不会有多少区别。
网友评论