题目描述:

  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。

  解题思路:

  似乎有一个规律,题目描述越长,题目的难度反而一般比较小,因为越长的题目给出的要求更加具体,可用信息也越多。对于此题,首先认真分析题意,我们可以得到以下几个信息:

  • 输入的是一个数组,并且长度为5,所有的元素都在0到13的范围内
  • 判断这5个元素能否构成顺子
  • 构成顺子的条件是:没有对子、最大最小值间隔不超过4,0可以充当任何数,相当于癞子

  因此,本题的具体思路并不难想到,说明如下:

  首先将这个数组排序,由于0可以充当任何数,因此第二步需要统计0的个数,以确定有几个癞子,第三步需要统计排序数组中相邻数字之间的空缺总数。如果空缺总数小于等于0的个数,那么就说明可以构成顺子,反之则无法构成。

  另外,还需要注意两个限制:(1)如果非0数字重复出现,也就是有对子,那么无法构成顺子;(2)如果排序之后最大和最小值(0除外)之间的间隔超过4,那么无需进一步计算,可以直接返回false。

  该算法的时间复杂度主要取决于排序,因此一般情况下为O(nlogn)。

  编程实现(Java):

import java.util.Arrays;
public class Solution {
public boolean isContinuous(int [] numbers) {
/*
思路:(1)数组排序 (2)统计0的个数 (3)统计相邻数字间间隔的总数 (4)如果有对子,直接返回false,如果max-min>=5,返回false
时间复杂度取决于排序算法,O(nlogn)
*/
if(numbers==null || numbers.length<5)
return false;
int len=numbers.length;
Arrays.sort(numbers); //(1)数组排序
int numberOf0=0;
for(int i=0;i<len;i++){ //(2)统计0的数量
if(numbers[i]!=0){
numberOf0=i;
break;
}
}
//所以有numberOf0个0,且第一个非0元素是numbers[numberOf0]
//(3)统计相邻数字间间隔的总数
if(numbers[len-1]-numbers[numberOf0]>len-1) //max-min>=5,直接返回false
return false;
int count=0;
for(int i=numberOf0;i<len-1;i++){
if(numbers[i]==numbers[i+1]) //对子,这个要注意
return false;
count+=(numbers[i+1]-numbers[i]-1);//相邻数字间间隔的总数
}
if(count>numberOf0) //间隔数大于癞子数,不足以构成序列
return false;
return true;
}
}

【剑指Offer】45、扑克牌顺子的更多相关文章

  1. 剑指Offer 45. 扑克牌顺子 (其他)

    题目描述 LL今天心情特别好,因为他去买了一副扑克牌,发现里面居然有2个大王,2个小王(一副牌原本是54张^_^)...他随机从中抽出了5张牌,想测测自己的手气,看看能不能抽到顺子,如果抽到的话,他决 ...

  2. [剑指Offer] 45.扑克牌顺子

    题目描述 LL今天心情特别好,因为他去买了一副扑克牌,发现里面居然有2个大王,2个小王(一副牌原本是54张^_^)...他随机从中抽出了5张牌,想测测自己的手气,看看能不能抽到顺子,如果抽到的话,他决 ...

  3. 【剑指Offer】扑克牌顺子 解题报告(Python)

    [剑指Offer]扑克牌顺子 解题报告(Python) 标签(空格分隔): 剑指Offer 题目地址:https://www.nowcoder.com/ta/coding-interviews 题目描 ...

  4. Go语言实现:【剑指offer】扑克牌顺子

    ​该题目来源于牛客网<剑指offer>专题. LL今天心情特别好,因为他去买了一副扑克牌,发现里面居然有2个大王,2个小王(一副牌原本是54张_)-他随机从中抽出了5张牌,想测测自己的手气 ...

  5. 《剑指offer》扑克牌顺子

    本题来自<剑指offer> 反转链表 题目: 思路: C++ Code: Python Code: 总结:

  6. 剑指offer:扑克牌顺子

    题目描述: LL今天心情特别好,因为他去买了一副扑克牌,发现里面居然有2个大王,2个小王(一副牌原本是54张^_^)...他随机从中抽出了5张牌,想测测自己的手气,看看能不能抽到顺子,如果抽到的话,他 ...

  7. 剑指 Offer 61. 扑克牌中的顺子 + 简单题 + 思维

    剑指 Offer 61. 扑克牌中的顺子 Offer_61 题目描述 java代码 package com.walegarrett.offer; /** * @Author WaleGarrett * ...

  8. 剑指 Offer 61. 扑克牌中的顺子

    剑指 Offer 61. 扑克牌中的顺子 从扑克牌中随机抽5张牌,判断是不是一个顺子,即这5张牌是不是连续的.2-10为数字本身,A为1,J为11,Q为12,K为13,而大.小王为 0 ,可以看成任意 ...

  9. 力扣 - 剑指 Offer 45. 把数组排成最小的数

    题目 剑指 Offer 45. 把数组排成最小的数 思路1 将整数数组转化成字符串数组 然后使用Arrays工具类的sort方法帮助我们排序 代码 class Solution { public St ...

  10. 【剑指offer】扑克牌的顺子

    个大王,2个小王(一副牌原本是54张^_^)...他随机从中抽出了5张牌,想測測自己的手气,看看能不能抽到顺子,假设抽到的话,他决定去买体育彩票,嘿嘿! ."红心A,黑桃3,小王,大王,方片 ...

随机推荐

  1. Clojure:将两个list合并成一个map

    假设我们有两个list,分别是: (def a [“one” “two” “three”]) (def b [1 2 3]) 我们要把它们合为一个键值对应的map,做法很简单: 1. 先将a和b合为一 ...

  2. HDU 4598

    这道题其实不需要考虑具体数值,但可以肯定的是,相连边的两端点必定有一正一负,至于谁正谁负,并不重要,这是可以思考的,很明显的一个二分图性质,如果不满足此条件,是不可能满足题目第二个条件的.所以首先对题 ...

  3. java调用百度地图API依据地理位置中文获取经纬度

    百度地图api提供了非常多地图相关的免费接口,有利于地理位置相关的开发,百度地图api首页:http://developer.baidu.com/map/. 博主使用过依据地理依据地理位置中文获取经纬 ...

  4. linux下oracle11G DG搭建(二):环绕主库搭建操作

    linux下oracle11G DG搭建(二):环绕主库搭建操作 环境 名称 主库 备库 主机名 bjsrv shsrv 软件版本号 RedHat Enterprise5.5.Oracle 11g 1 ...

  5. Mybatis 框架文档 超具体笔记

    1      Mybatis入门 1.1    单独使用jdbc编程问题总结 1.1.1  jdbc程序 Public static void main(String[] args) { Connec ...

  6. 卡尔曼滤波(Kalman Filter) 的进一步讨论

    我们在上一篇文章中通过一个简单的样例算是入门卡尔曼滤波了.本文将以此为基础讨论一些技术细节. 卡尔曼滤波(Kalman Filter) http://blog.csdn.net/baimafujinj ...

  7. Xcode 自己主动生成版本技术最佳实践

    在 bloglovin ,我们使用自己主动生成版本来设置Xcode,使当前的版本为在Git活跃的分支上 的提交数. 它一直正常工作着.但我们的技术也不是一帆风顺的. 糟糕的老方法 我们使用的技术是来自 ...

  8. user和userdebug区别

    user:不可以root userdebug:可以root

  9. ConfigSections配置

    如果配置文件中包含了configSections,那么configSections的下一个节点,必须是configSections里面的元素 <configSections> <se ...

  10. Tool:ProcessOn

    ylbtech-Tool:ProcessOn ProcessOn是一个面向垂直专业领域的作图工具和社交网络,成立于2011年6月并于2012年启动.ProcessOn将全球的专家顾问.咨询机构.BPM ...