《剑指offer》——扑克牌顺子
来源:互联网 发布:安全炒股软件 编辑:程序博客网 时间:2024/06/14 08:59
T:
题目描述
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的运气如何。为了方便起见,你可以认为大小王是0。
思路不难,就是给定5个元素,判断是不是顺子。
- 首先对元素排序,如果有相同元素出现,肯定不是对子;
- 在一个顺子中,最大元素和最小元素的差值一定是4,比如:4,5,6,7,8。现在由于大小王的存在,差值要小于等于4.
- 换一种方式,后一个元素减前一个元素再减一,其差值为0,依次减下去,并将差值相加,应该还是零。如果不是零,那这里就存在跳跃,中间漏掉的元素,就用0补上。
eg: 0,4,5,7,8 差值之和肯定为1,代表中间漏掉了1个元素,若差值之和为k,那么代表漏掉了k个元素。如果k的值大于前面0的值,那就没法补了,即不是顺子。
code:
/** * T: 扑克牌顺子 * * 题目描述 * 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的运气如何。为了方便起见,你可以认为大小王是0。 * * date: 2015.11.24 19:03 * @author SSS * */ public class Solution { /** * 先排序,在看非零元素之间的差值之和,是否能构成顺子 * @param numbers * @return */ public boolean isContinuous(int [] numbers) { boolean flag = false; if (numbers == null || numbers.length != 5) { return false; } int []temp = new int[numbers.length]; for (int i = 0; i < numbers.length; i++) { temp[i] = numbers[i]; } // 先对数组排序 for (int i = 0; i < temp.length; i++) { int min = temp[i]; int index = i; for (int j = i + 1; j < temp.length; j++) { if (temp[j] < min) { min = temp[j]; index = j; } } temp[index] = temp[i]; temp[i] = min; } int zeroIndex = 0; // 找出有多少个0,即有多少个大/小王 for (zeroIndex = 0; zeroIndex < temp.length && temp[zeroIndex] == 0; zeroIndex++); int count = 0; // 从非零处往后遍历,后者减前者,统计这个差的和是多少 for (int i = zeroIndex; i < temp.length - 1; i++) { if (temp[i] == temp[i + 1]) { //如果有相同的元素存在,也不是顺子 return flag; } count += temp[i + 1] - temp[i] - 1; } if (count <= zeroIndex) { flag = true; } return flag; } }
0 0
- 剑指offer—扑克牌顺子
- 剑指offer—扑克牌顺子
- 剑指offer——扑克牌的顺子
- 《剑指offer》——扑克牌顺子
- 剑指Offer——扑克牌的顺子
- 剑指offer——扑克牌顺子
- 剑指offer——扑克牌顺子
- 剑指offer——扑克牌顺子
- 剑指offer——扑克牌顺子
- 剑指Offer—45—扑克牌顺子
- 剑指offer——46.扑克牌顺子
- 剑指offer--扑克牌顺子
- 《剑指offer》扑克牌顺子
- 剑指offer:扑克牌顺子
- 剑指offer:扑克牌顺子
- 剑指offer:扑克牌顺子
- [剑指offer]扑克牌顺子
- 剑指offer|扑克牌顺子
- zoj3160 DP
- Scalaz(14)- Monad:函数组合-Kleisli to Reader
- Vector与ArrayList区别
- 设计模式 - 行为型模式 - 观察者模式
- php 不能通过表单获取所有select的值,用js赋值一个隐藏域
- 《剑指offer》——扑克牌顺子
- Winform 子线程更新 控件
- 有关fastjson输出的时候double不输出后面.0的问题
- Android使用XMPP协议、Openfire服务器和Smack类库实现即时通信
- FTGL用户指南 2.1.3~rc5
- GitHub添加SSH keys报错Key is invalid. It must begin with 'ssh-ed25519', 'ssh-rsa', 'ssh-dss', 'ecdsa-sha
- ERROR 2006 (HY000): MySQL server has gone away
- JAVA中String类的常见操作
- Xshell 安装教程