(剑指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个数字.求出这个圈圈里剩下的最后一个数字 ...
随机推荐
- brpc初探
因为最近在看一个内部开源代码,看到了braft.braft又依赖于brpc.于是就看了相关的文档,打算接下来试一把. 这里引用下gejun大佬在知乎上的回答(https://www.zhihu.com ...
- FastReport.Net使用:[34]小册子报表(奇偶页)
打印一份小册子类型的报表,能实现如下要求: ●单独的封面,目录,报表内容,背面 ●奇偶页不同的页边距 ●奇偶页不同的页面/页脚 下面的例子将用到以上3点. 1.奇偶页的实现主要通过报表控件对象的Pri ...
- 欧拉回路 uoj117
写了一道欧拉回路的模板题.先判断是否是欧拉回路,有向图和无向图有一点点不同,然后就是特判独立点的存在. 之后是输出路径,和dls学的dfs,利用last数组的更新可以做到线性的复杂度,否则一不小心就会 ...
- DiskFileUpload上传与Spring的CommonsMultipartResolver上传对比
最近在做一个小小的上传功能竟被虐得体无完肤, 在使用tomcat内置的DiskFileUpload获取前台jsp传来的附件参数和其他表单参数, 竟然出现莫名其妙的乱码问题, 即使tomcat的serv ...
- bzoj 2770 堆的中序遍历性质
我们知道二叉搜索树的中序遍历是一个已经排好序的序列,知道序列我们无法确定树的形态(因为有多种). 但是,Treap如果告诉我们它的关键字以及权值,那么就可以唯一确定树的形态(Treap的O(logn) ...
- python开发_filecmp
filecmp模块用于比较文件及文件夹的内容,它是一个轻量级的工具,使用非常简单.python标准库还提供了difflib模块用于比较文件的内容.关于difflib模块,且听下回分解. filecmp ...
- js中常用日期时间转换
常用日期时间处理插件:1. timeago.js处理几分钟之前 2. day.js 3. moment.js 注意: 1. 此处的标准时间格式为 2018-03-23 13:35:47 ...
- iPhone X 适配手机端 H5 页面通用解决方案
一:本文提供两种解决方案 1.终端解决方案(最优,建议选择) 2.web解决方案 导语: iPhone X的出现,一方面对于整个手机行业的发展极具创新领头羊的作用,另一方面也对现有业务的页面适配带来了 ...
- Spark编程指南V1.4.0(翻译)
Spark编程指南V1.4.0 · 简单介绍 · 接入Spark · Spark初始化 · 使用Shell · 在集群上部署代码 ...
- Can't deserialize with binaryFormatter after changing namespace of class
After changing the namespace of my class I can no longer deserialize the objects. I've implemented S ...