剑指Offer题目:从扑克牌中随机抽 5 张牌,判断是不是顺子,即这 5 张牌是不是连续的。 2-10 为数字本身,A 为 1,J 为 11,Q 为 12,K 为 13,而大小王可以看成任意的 数字。
剑指Offer面试题 44:扑克牌的顺子
从扑克牌中随机抽 5 张牌,判断是不是顺子,即这 5 张牌是不是连续的。 2-10 为数字本身,A 为 1,J 为 11,Q 为 12,K 为 13,而大小王可以看成任意的 数字。
package sample.java;import java.text.SimpleDateFormat;
import java.util.*;public class Main {public static void main(String args[]) {Main test = new Main();int[] array={0,4,6,8,0};System.out.println(test.isContinuous(array));}public boolean isContinuous(int[] number){if(number==null){return false;}Arrays.sort(number);int numberZero=0;int numberGap=0;for(int i=0;i<number.length && number[i]==0;i++){numberZero++;}int small = numberZero;int big = small+1;while(big < number.length){if(number[small]==number[big])return false;numberGap += number[big] - number[small]-1;small=big;big++;}return (numberGap>numberZero)?false:true;}
}
运算结果为true,如果4修改为3则为false
思路:
第一步:首先把大小王的值默认设置为0,然后计算出随机抽取出来的王的个数,用numberZero表示。在示例中int array = [0,4,6,8,0],即第一个和最后一个为抽取出来的两个王,所以numberZero为2.
第二步:从新排序数组,安从小到大的顺序:[0,0,4,6,8]
为了明白接下来的说明,引入一个名词:坡度,对应示例中的numberGap。我们定义坡度为数组相邻两个值的差减去1(此处的数组为去掉大小王也就是去掉0之后的数组,比如[4,6,8]).统计出所有的相邻坡度和:6和4的坡度为1,8和6的坡度为1.所以数组的总坡度为1+1=2.该示例中计算坡度的代码:
while(big < number.length){if(number[small]==number[big])return false;numberGap += number[big] - number[small]-1;//等于numberGap = numberGap + (number[big] - number[small] - 1);small=big;big++;}
在该示例中计算坡度numberGap结果为2。
第三步:如果大小王也就是0的个数小于总坡度数,则随机抽取的牌不是连续的,反之则连续。
对比生活中的例子:比如盖楼梯,一阶是一块砖,有时候失误一阶高度变成了两块砖或三块砖,此刻修补的方法就是你手里有几个王,一个王就可以弥补一阶的失误。
剑指Offer题目:从扑克牌中随机抽 5 张牌,判断是不是顺子,即这 5 张牌是不是连续的。 2-10 为数字本身,A 为 1,J 为 11,Q 为 12,K 为 13,而大小王可以看成任意的 数字。相关推荐
- java剑指offer_剑指offer题目java实现
Problem2:实现Singleton模式 题目描述:设计一个类,我们只能生成该类的一个实例 1 packageProblem2;2 3 public classSingletonClass {4 ...
- 剑指Offer题目详解(CPP、JAVA)
2019.10.11更新 最近开始学习c++,在本文中增加c++的解法,并更新一部分题目的解法. 前言(2018.6.1) 虽然已经度过了艰辛的找实习的日子,到了公司实习.但依然非常怀念那段准备面试. ...
- 剑指offer题目及答案
剑指offer 最近在牛客网上刷剑指offer的题目,现将题目和答案总结如下: 1. 二维数组的查找 2. 替换空格 3. 从尾到头打印链表 4. 重建二叉树 5. 用两个栈实现队列 6. 旋转数组的 ...
- 扑克牌中的顺子。从扑克牌中随机抽5张牌,判断是不是一个顺子,即这5张牌是不是连续的。2~10为数字本身,A为1,J为11,Q为12,K为13,而大、小王可以看成任意数字。
面试题36:扑克牌中的顺子 1.题目描述 题目:从扑克牌中随机抽5张牌,判断是不是一个顺子,即这5张牌是不是连续的.2~10为数字本身,A为1,J为11,Q为12,K为13,而大.小王可以看成任意数字 ...
- 剑指offer题目记录
1.如下为类型CMyString的声明,请为该类型添加赋值运算符函数. 1 class CMyString 2 { 3 public: 4 CMyString(char* pData = NULL); ...
- 剑指 Offer II 014. 字符串中的变位词
剑指 Offer II 014. 字符串中的变位词 题目 示例 解答 题目来源为leetcode 题目 给定两个字符串s1和s2,写一个函数来判断s2是否包含s1的某个变位词. 换句话说,第一个字符串 ...
- 剑指 offer 题目分析及答案
1. 前言 2. 实现 Singleton 3. 数组中重复的数字 4. 二维数组中的查找 5. 替换空格 6. 从尾到头打印链表 7. 重建二叉树 8. 二叉树的下一个结点 9. 用两个栈实现队列 ...
- 【算法-剑指 Offer】62. 圆圈中最后剩下的数字(环形链表;约瑟夫环;动态规划)
剑指 Offer 62. 圆圈中最后剩下的数字 - 力扣(LeetCode) 发布:2021年9月12日12:18:52 问题描述及示例 0,1,···,n-1这n个数字排成一个圆圈,从数字0开始,每 ...
- LeetCode和剑指offer题目大合集
AlgorithmCode 本仓库收集一些算法的答案,目标是整理一套系统的算法参考答案以供其他学习者参考,我也在慢慢的学算法并且在坚持刷题,我会不定期的上传新的题目,希望大家共同努力! https:/ ...
最新文章
- Java 基础 - 如何重写equals()
- 冰刃初步使用图解(Win7 64位)
- LL-verilog语法:case用法
- 中英文标点符号切换的组合键_易混标点符号:一字线(—)、短横线(-)、浪纹线(~)...
- android下挂串口中断,请大神看看为啥串口中断无法打断定时器中断
- hadoop配置文件_Hadoop分布式集群
- 时至 2018 年,还有必要学 Vim 吗?
- Contacts Provider使用
- 宝塔面板 python管理器2.0安装Mrdoc
- 一招教你电脑微信双开
- 第二周——团队项目(小小大佬带飞队)
- mongodb4.4 windows环境安装
- 厦门故事(二):这是我第一次发现,原来风声可以这么好听
- 关于下载《Java程序员,上班那点事儿》的电子版
- 【杂耍】联想G40装Win7系统
- 计算机应用的时间识别的,计算机人工智能识别关键技术及运用
- win10之定时关机
- M1 Mac安装 arm 软件
- 苹果微信验证失败,安卓成功_苹果将​​在微软失败的地方成功吗?
- 浏览DELPHI的源代码