剑指Offer JZ45 扑克牌顺子(Java)
程序员文章站
2022-03-23 15:34:28
一 题目描述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!”。LL决定去买体育彩票啦。...
一 题目描述
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!”。LL决定去买体育彩票啦。 现在,要求你使用这幅牌模拟上面的过程,然后告诉我们LL的运气如何, 如果牌能组成顺子就输出true,否则就输出false。为了方便起见,你可以认为大小王是0。
思路及解题
case A
- 排序数组
- 统计0的个数
- 统计排序之后的数组中相邻数字之间的空缺总数,如果空缺的总数小于或等于0的个数,则这个数组就是连续的
public class Solution {
public boolean isContinuous(int [] numbers){
int zeroNum = 0 ; // 初始化王牌数
int gapNum = 0; // 初始化空缺数
// 判断是否满足`取五张牌`的要求
if(numbers.length != 5){
return false;
}
// 对所取的牌进行排序
for (int i = 0; i < numbers.length; i++){
for (int j = 0; j < numbers.length - 1 - i; j++)
if (numbers[j + 1] < numbers[j]) {
int temp = numbers[j + 1];
numbers[j + 1] = numbers[j];
numbers[j] = temp;
}
}
// 万能牌数量
for (int i = 0 ; i< numbers.length ; i++){
if(numbers[i]==0)
zeroNum += 1;
}
int low = zeroNum;
int high = zeroNum + 1;
// 计算空缺总数
while(high < numbers.length){
if(numbers[low]==numbers[high]){
return false;
}
gapNum += numbers[high]-numbers[low]-1;
low = high;
high++;
}
// 比较空缺数和万能牌数量
if(gapNum <= zeroNum){
return true;
}else
return false;
}
}
本文地址:https://blog.csdn.net/qq_32550195/article/details/107343500
上一篇: 2020-08-08
推荐阅读
-
剑指offer 剪绳子(动态规划) Java
-
[算法练习-剑指offer]题18.二叉树的镜像(Java)
-
剑指offer之队列中的最大值(C++/Java双重实现)
-
荐 剑指Offer(Java)---字符串
-
剑指offer之在排序数组中查找数字 I(C++/Java双重实现)
-
剑指Offer04:二维数组中的查找(Java)
-
剑指offer:数组中只出现一次的两个数字(java版)
-
《剑指Offer》Java刷题 NO.40 数组中只出现一次的数字(数组、HashMap、位运算、异或)
-
剑指offer(Java实现)56 - 数组中只出现一次的两个数字
-
《剑指offer》 数组中只出现一次的数字(数组中只出现一次的两个数字)(Java)