顺子

45-剑指offer-扑克牌顺子

て烟熏妆下的殇ゞ 提交于 2020-03-12 01:21:40
题目描述 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。 法一: 1、排序 2、计算所有相邻数字间隔总数 3、计算0的个数 4、如果2、3相等,就是顺子 5、如果出现对子,则不是顺子 import java.util.Arrays; public class Solution { public boolean isContinuous(int[] numbers) { int numOfZero = 0; int numOfInterval = 0; int length = numbers.length; if(length == 0){ return false

[剑指Offer]61-扑克牌中的顺子

人盡茶涼 提交于 2020-03-11 09:10:36
题目 “红心A,黑桃3,小王,大王,方片5”,大\小 王可以看成任何数字,并且A看作1,J为11,Q为12,K为13。上面的5张牌就可以变成“1,2,3,4,5”(大小王分别看作2和4),“So Lucky!”。LL决定去买体育彩票啦。 现在,要求你使用这幅牌模拟上面的过程,然后告诉我们LL的运气如何, 如果牌能组成顺子就输出true,否则就输出false。为了方便起见,你可以认为大小王是0。 题解 满足两个条件: - 除零外,所有出现的元素都不重复。 - 最大值-最小值<5。 代码 public class Main { public static void main(String[] args) { int[] numbers= {0,0,1,7,9}; System.out.println(isContinuous(numbers)); } public static boolean isContinuous(int [] numbers) { if(numbers.length!=5) { return false; } boolean[] occur=new boolean[14]; for(int i=0;i<occur.length;++i) { occur[i]=false; } int max=-1; int min=14; for(int i=0;i

[剑指offer]扑克牌顺子

房东的猫 提交于 2020-03-11 09:10:23
题目描述 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。 题目链接: https://www.nowcoder.com/practice/762836f4d43d43ca9deb273b3de8e1f4?tpId=13&tqId=11198&rp=3&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking package com.sunshine.OFFER66_SECOND; import org.junit.Test; import java.util.Arrays; public

剑指offer之 扑克牌顺子

半世苍凉 提交于 2020-03-09 02:21:19
题目描述 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。 思路 首先排序,确定0的个数,其次计算非0数字之间的间隔,若0的个数>=间隔数,则顺子,否则false 代码 class Solution { public: bool IsContinuous( vector<int> numbers ) { if(numbers.size()<5) return false; sort(numbers.begin(),numbers.end()); int zero_count = 0; int Num_invertal = 0; while(numbers[zero_count]=

45.扑克牌顺子(java)

混江龙づ霸主 提交于 2020-03-03 22:03:39
题目描述 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的数组,判断这个数组是不是顺子(注意输入可能为空)。 max 记录 最大值 min 记录 最小值 min ,max 都不记0 满足条件 1 max - min <5 2 除0外没有重复的数字(牌) 3 数组长度 为5 public class Solution { public boolean isContinuous(int [] numbers) { if(numbers.length!=5) return false; int max_num = -1; int min

剑指offer-扑克牌的顺子

最后都变了- 提交于 2020-02-26 00:50:26
题目描述 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。 思路 排序,计算0的个数,判断0是否满足需求,判断是否出现对子 AC代码 # include <iostream> # include <vector> # include <algorithm> using namespace std ; class Solution { public : bool IsContinuous ( vector < int > numbers ) { if ( numbers . size ( ) == 0 ) return false ; sort ( numbers . begin

扑克牌概率

我怕爱的太早我们不能终老 提交于 2020-02-25 19:56:13
扑克牌概率 一副扑克牌,去除大小王,剩下52张,从中任意取两张,能成一对的概率是多大? 解法一: 52张牌任选两张,共有C(2, 52) = (52×51)/ 2×1 = 1326种组合 同一点数的4张牌任选两张,有C(3, 4) = 6种组和,而一副牌有13种点数,所以成一对的组合有6×13 = 78种 那么,52张牌任选两张成一对待概率是78/1326 = 1/17 解法二: 我们先计算一下找到某个特定点数的对子的概率,比如两个A的概率,然后乘以13即可。 首先从52张任选一张是A的概率为4/52,然后从剩下的51张再选一张是A的概率为3/51,所以两张A的概率是(4/52)×(3/51)= 1/221 则13×(1/221)= 1/17 下面是一些从网上找到的资料,用来计算常见的扑克牌概率的,可以做参考      约定:   A,2,3,4....J,Q,K 称为牌点   梅花,红桃,黑桃,方块称为花色      同一花色,牌点连续的称为顺金 如: 梅花Q-K-A   不同花色,牌点连续的称为顺子 如: 梅花Q-梅花K-方块A      两张相同牌点称为对子: 如: 梅花3-梅花3-方块K   三张相同牌点称为炸弹: 如: 红桃A-红桃A-红桃A      取组合符号C(n,k),表示n个元素当中不重复任取k个   计算方法是   C(n,k) = n*(n-1)*(n-2)

剑指offer打卡|扑克牌顺子

被刻印的时光 ゝ 提交于 2020-02-17 02:38:29
题目描述 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。 代码 本弱鸡少见地跟题解思路相同。 import java.util.Arrays; public class Solution { public boolean isContinuous(int [] numbers) { if(numbers.length<5){ return false; } Arrays.sort(numbers); int count=0; for(int nums:numbers){ if(nums==0){ count++; } } for(int i=count;i

《剑指offer》之扑克牌顺子

天大地大妈咪最大 提交于 2020-02-13 17:26:05
前言 接着来刷一道简单的算法题 题目 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。 分析 就是一个数组,0表示大小王,可以当癞子,其他的最小是1,最大是13,求给出的这个数组能否组成顺子。 我们仔细想想一个正常的顺子,比如6,7,8,9,10. 那最大值和最小值差为4,并且不能重复。所以我们应该得出两个结论。 1,最大值和最小值相差小于等于4,为什么会小于4呢,因为有癞子0导致的。 2.除了癞子0以外,其他的数字不能重复。 所以根据上面的条件我们就可以写出算法了。 求出最小值,最大值。 重复数字怎么判断呢? 先判断是否为0,不为0,将这个数字作为脚标存到另一个数组中

《剑指Offer》61. 扑克牌顺子

▼魔方 西西 提交于 2020-02-09 03:24:33
题目链接 牛客网 题目描述 五张牌,其中大小鬼为癞子,牌面为 0。判断这五张牌是否能组成顺子。 解题思路 import java . util . * ; public class Solution { public boolean isContinuous ( int [ ] nums ) { if ( nums == null || nums . length < 5 ) return false ; int cnt = 0 ; Arrays . sort ( nums ) ; // 统计癞子数量 for ( int i = 0 ; i < nums . length ; i ++ ) if ( nums [ i ] == 0 ) cnt ++ ; // 使用癞子去补全不连续的顺子 for ( int i = cnt ; i < nums . length - 1 ; i ++ ) { if ( nums [ i ] == nums [ i + 1 ] ) return false ; cnt -= nums [ i + 1 ] - nums [ i ] - 1 ; } return cnt >= 0 ; } } 来源: CSDN 作者: Melo丶 链接: https://blog.csdn.net/weixin_38611497/article/details