题目:从扑克牌中随机抽5张牌,判断是不是一个顺子,即这5张牌是不是连续的。2~10为数字本身,A为1,J为11,Q为12,K为13,而大、小王可以看成任意数字。为了方便起见,你可以认为大小王是0。
思路:五个数满足下面几个条件即可(使用TreeSet默认对int实现自动有序排列并且值不能重复)
1、剩余数字+0的个数=5
2、排序后的最大值-最小值<5 // 注意这里是大小王除外的即0除外的元素
3、没有重复数字
import java.util.*;
public class Solution {
public boolean isContinuous(int [] numbers) {
if(numbers==null||numbers.length!=5)return false;
int num = 0;
TreeSet<Integer> set = new TreeSet<Integer>();
for(int i =0;i<numbers.length;i++){
if(numbers[i]==0){
num++;
}else{
set.add(numbers[i]);
}
}
if(num+set.size()!=5){
return false;
}
if((set.last()-set.first())<5){
return true;
}
return false;
}
}
时间复杂度:O(n)
空间复杂度:O(1)
练习地址:https://www.nowcoder.com/practice/762836f4d43d43ca9deb273b3de8e1f4