(剑指Offer)面试题44:扑克牌的顺子
题目:
从扑克牌中随机抽5张牌,判断是不是一个顺子,即这五张牌是不是连续的,2~10为数字本身,A为1,J为11,Q为12,K为13,而大小王可以看成任意数字。
思路:
把5张牌看成一个数组,就看排序后的数组是不是连续的,大小王看成特殊的数字,例如定义为0,与其他数字区分开,0的作用就是补充其他数字间不连续的空缺。
步骤:1、将数组排序;2、统计0的个数;3、统计排序后的数组中相邻数字之间的空缺总数,如果空缺总数小于0的个数,那么该数组不连续,如果空缺总数小于或等于0的个数,那么该数组连续。
注意:如果非0数组重复出现,那么该数组也不是连续的,即扑克牌中出现了对子,不可能是顺子。
代码:
#include <iostream>
#include <algorithm> using namespace std; int compare(const void* arg1,const void* arg2){
return *(int*)arg1-*(int*)arg2;
} bool IsContinuous(int* numbers,int length){
if(numbers==NULL || length<1)
return false; qsort(numbers,length,sizeof(int),compare); int numberOfZero=0;
int numberOfGap=0; for(int i=0;i<length;i++){
if(numbers[i]==0)
numberOfZero++;
} for(int i=numberOfZero;i<length-1;i++){
if(numbers[i]==numbers[i+1])
return false;
numberOfGap+=numbers[i+1]-numbers[i]-1;
} if(numberOfGap<=numberOfZero)
return true;
else
return false;
} class Solution {
public:
bool IsContinuous( vector<int> numbers ) {
int len=numbers.size(); int numberOfZero=0;
int numberOfGap=0; sort(numbers.begin(),numbers.end()); for(int i=0;i<len;i++){
if(numbers[i]==0)
numberOfZero++;
} for(int i=numberOfZero;i<len-1;i++){
if(numbers[i]==numbers[i+1])
return false;
numberOfGap+=numbers[i+1]-numbers[i]-1;
} if(numberOfGap>numberOfZero)
return false;
else
return true;
}
}; int main()
{
int A[]={0,0,1,3,6};
int len=sizeof(A)/sizeof(A[0]);
cout << IsContinuous(A,len) << endl;
return 0;
}
在线测试OJ:
http://www.nowcoder.com/books/coding-interviews/762836f4d43d43ca9deb273b3de8e1f4?rp=2
AC代码:
class Solution {
public:
bool IsContinuous( vector<int> numbers ) {
int len=numbers.size();
if(len<=0)
return false;
int numberOfZero=0;
int numberOfGap=0;
sort(numbers.begin(),numbers.end());
for(int i=0;i<len;i++){
if(numbers[i]==0)
numberOfZero++;
}
for(int i=numberOfZero;i<len-1;i++){
if(numbers[i]==numbers[i+1])
return false;
numberOfGap+=numbers[i+1]-numbers[i]-1;
}
if(numberOfGap>numberOfZero)
return false;
else
return true;
}
};
(剑指Offer)面试题44:扑克牌的顺子的更多相关文章
- 剑指Offer:面试题15——链表中倒数第k个结点(java实现)
问题描述 输入一个链表,输出该链表中倒数第k个结点.(尾结点是倒数第一个) 结点定义如下: public class ListNode { int val; ListNode next = null; ...
- 剑指offer面试题3 二维数组中的查找(c)
剑指offer面试题三:
- 剑指Offer——笔试题+知识点总结
剑指Offer--笔试题+知识点总结 情景回顾 时间:2016.9.23 12:00-14:00 19:00-21:00 地点:山东省网络环境智能计算技术重点实验室 事件:笔试 注意事项:要有大局观, ...
- C++版 - 剑指offer之面试题37:两个链表的第一个公共结点[LeetCode 160] 解题报告
剑指offer之面试题37 两个链表的第一个公共结点 提交网址: http://www.nowcoder.com/practice/6ab1d9a29e88450685099d45c9e31e46?t ...
- C++版 - 剑指offer 面试题23:从上往下打印二叉树(二叉树的层次遍历BFS) 题解
剑指offer 面试题23:从上往下打印二叉树 参与人数:4853 时间限制:1秒 空间限制:32768K 提交网址: http://www.nowcoder.com/practice/7fe2 ...
- C++版 - 剑指offer 面试题39:判断平衡二叉树(LeetCode 110. Balanced Binary Tree) 题解
剑指offer 面试题39:判断平衡二叉树 提交网址: http://www.nowcoder.com/practice/8b3b95850edb4115918ecebdf1b4d222?tpId= ...
- Leetcode - 剑指offer 面试题29:数组中出现次数超过一半的数字及其变形(腾讯2015秋招 编程题4)
剑指offer 面试题29:数组中出现次数超过一半的数字 提交网址: http://www.nowcoder.com/practice/e8a1b01a2df14cb2b228b30ee6a92163 ...
- C++版 - 剑指Offer 面试题39:二叉树的深度(高度)(二叉树深度优先遍历dfs的应用) 题解
剑指Offer 面试题39:二叉树的深度(高度) 题目:输入一棵二叉树的根结点,求该树的深度.从根结点到叶结点依次经过的结点(含根.叶结点)形成树的一条路径,最长路径的长度为树的深度.例如:输入二叉树 ...
- C++版 - 剑指offer 面试题24:二叉搜索树BST的后序遍历序列(的判断) 题解
剑指offer 面试题24:二叉搜索树的后序遍历序列(的判断) 题目:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则返回true.否则返回false.假设输入的数组的任意两个 ...
- C++版 - 剑指Offer 面试题45:圆圈中最后剩下的数字(约瑟夫环问题,ZOJ 1088:System Overload类似)题解
剑指Offer 面试题45:圆圈中最后剩下的数字(约瑟夫环问题) 原书题目:0, 1, - , n-1 这n个数字排成一个圈圈,从数字0开始每次从圆圏里删除第m个数字.求出这个圈圈里剩下的最后一个数字 ...
随机推荐
- Java常用工具类之MD5加密
package com.wazn.learn.util; import java.security.MessageDigest; /** * MD5加密工具类 * <功能详细描述> * * ...
- Eclipse项目红色叹号解决方法
情况:就是项目出现红色感叹号 解决方法: 对准项目右键选择Build Path → configure build path 点击eclipse项目的configure build path后,在弹出 ...
- 模型的性能评估(二) 用sklearn进行模型评估
在sklearn当中,可以在三个地方进行模型的评估 1:各个模型的均有提供的score方法来进行评估. 这种方法对于每一种学习器来说都是根据学习器本身的特点定制的,不可改变,这种方法比较简单.这种方法 ...
- PAT甲级1014. Waiting in Line
PAT甲级1014. Waiting in Line 题意: 假设银行有N个窗口可以开放服务.窗前有一条黄线,将等候区分为两部分.客户要排队的规则是: 每个窗口前面的黄线内的空间足以包含与M个客户的一 ...
- python 读写txt文件并用jieba库进行中文分词
python用来批量处理一些数据的第一步吧. 对于我这样的的萌新.这是第一步. #encoding=utf-8 file='test.txt' fn=open(file,"r") ...
- linux基础命令学习 (九)文本操作
一.head 1.语法: head [选项] [文件] 2.选项 -q 隐藏文件名 -v 显示文件名 -c<字节> 显示字节数 -n<行数> 显示的行数 3.示例 范例一:查看 ...
- ExtJS表格——行号、复选框、选择模型
本篇的内容是为表格添加行号,和复选框,最后谈一下Ext的选择模型.内容比较简单,就直接上代码了.一. 设置行号 行号的设置主要问题在于删除某一行后需要重新计算行号 Ext.onReady(fun ...
- Simple microcontroller-temperature measurement uses only a diode and a capacitor
Using a PN-junction diode for temperature measurement usually depends on its 2‑mV/K temperature coe ...
- 在WPF中显示动态GIF
在我们寻求帮助的时候,最不愿意听到的答复是:很抱歉,在当前版本的产品中还没有实现该功能... 在WPF中显示动态的GIF图像时便遇到了这样的问题,WPF中强大的Image控件却不支持动态的GIF(其只 ...
- sessionid与cookie
转自:http://smiky.iteye.com/blog/649164 发现自己真的是很笨,过去一直用jsp,从来不用怕心用户信息放在session里面会找不到,现在不用jsp,前台全用html, ...