【LeetCode笔记】剑指 Offer 61-. 扑克牌中的顺子 (Java、哈希表)
文章目录
- 题目描述
- 思路 & 代码
- 二刷
题目描述
- 感觉算比较有意思的简单题了,耗了不少时间优化= =
思路 & 代码
- 这次注释写得比较详细,直接看注释吧~
class Solution {public boolean isStraight(int[] nums) {// O(n) && O(n):哈希表Set<Integer> hashset = new HashSet<>();int max = -1, min = 14;for(int num : nums){// 0 不参与比较if(num == 0){continue;}// 重复情况直接 falseif(hashset.contains(num)){return false;}// 维护 max & min & sethashset.add(num);max = Math.max(max, num);min = Math.min(min, num);}// “无重复”,并且 max - min < 5,则一定顺子:用 min & max 固定首尾// a. 1 2 3 4 5// b. 0 0 1 2 5:固定 1 5,由于无重复,其他3个元素在中间刚好填了连续 1 xxx 5// c. 0 0 3 4 5:固定 3 5,同上,不过此处为 xx 3 x 5return max - min < 5;}
}
二刷
- 呃,确实忘了最优写法了,但是总体复杂度不变的写法
- 逐个维护,跑一遍五个数字,没有的用0来替。
class Solution {public boolean isStraight(int[] nums) {int min = Integer.MAX_VALUE;int counts = 0;Set<Integer> set = new HashSet<>(); for(int num : nums) {if(num == 0) {counts++;}else {set.add(num);min = Math.min(num, min);}}for(int i = min; i <= min + 4; i++) {if(!set.contains(i)) {if(counts > 0) {counts--;}else {return false;}}}return true;}
}
- 最优写法:利用了各种条件(见之前的注释)
class Solution {public boolean isStraight(int[] nums) {int min = 14, max = -1;Set<Integer> set = new HashSet<>();for(int num : nums) {if(num == 0) {continue;}if(set.contains(num)) {return false;}else {set.add(num);min = Math.min(min, num);max = Math.max(max, num);}}return max - min < 5;}
}
【LeetCode笔记】剑指 Offer 61-. 扑克牌中的顺子 (Java、哈希表)相关推荐
- 【LeetCode】剑指 Offer 61. 扑克牌中的顺子
[LeetCode]剑指 Offer 61. 扑克牌中的顺子 文章目录 [LeetCode]剑指 Offer 61. 扑克牌中的顺子 一.集合Set + 遍历 二.排序 + 遍历 总结 解题思路 根据 ...
- 【算法】剑指 Offer 61. 扑克牌中的顺子 【重刷】
文章目录 1.概述 2.方案 2.1 想减法(自研) 2.2 set 2.3 排序 1.概述 从若干副扑克牌中随机抽 5 张牌,判断是不是一个顺子,即这5张牌是不是连续的.2-10为数字本身,A为1, ...
- 剑指 Offer 61. 扑克牌中的顺子
这题的算法是,只要满足下面的条件即可视为连续 1.无重复 2.除了0以外,最大值和最小值的差不超过4
- 【LeetCode】剑指 Offer 51. 数组中的逆序对
[LeetCode]剑指 Offer 51. 数组中的逆序对 文章目录 [LeetCode]剑指 Offer 51. 数组中的逆序对 package offer;public class Soluti ...
- 【LeetCode】剑指 Offer 41. 数据流中的中位数
[LeetCode]剑指 Offer 41. 数据流中的中位数 文章目录 [LeetCode]剑指 Offer 41. 数据流中的中位数 package offer;import java.util. ...
- 【LeetCode】剑指 Offer 56. 数组中数字出现的次数
[LeetCode]剑指 Offer 56. 数组中数字出现的次数 文章目录 [LeetCode]剑指 Offer 56. 数组中数字出现的次数 package offer;import java.u ...
- 【LeetCode】剑指 Offer 39. 数组中出现次数超过一半的数字
[LeetCode]剑指 Offer 39. 数组中出现次数超过一半的数字 文章目录 [LeetCode]剑指 Offer 39. 数组中出现次数超过一半的数字 一.摩尔投票法 一.摩尔投票法 核心理 ...
- 【LeetCode】剑指 Offer 62. 圆圈中最后剩下的数字
[LeetCode]剑指 Offer 62. 圆圈中最后剩下的数字 文章目录 [LeetCode]剑指 Offer 62. 圆圈中最后剩下的数字 一.动态规划 总结 一.动态规划 构建一个长度为 n ...
- 【LeetCode】剑指 Offer 22. 链表中倒数第k个节点
[LeetCode]剑指 Offer 22. 链表中倒数第k个节点 文章目录 [LeetCode]剑指 Offer 22. 链表中倒数第k个节点 一.遍历 二.双指针 总结 一.遍历 先遍历统计链表长 ...
- 【LeetCode】剑指 Offer 43. 1~n 整数中 1 出现的次数
[LeetCode]剑指 Offer 43. 1-n 整数中 1 出现的次数 文章目录 [LeetCode]剑指 Offer 43. 1-n 整数中 1 出现的次数 package offer;pub ...
最新文章
- 需要单机还是集群部署_5000W如何玩转Filecoin市场 部署最符合企业的集群模式
- 虚拟手柄控制的小车 air3.4 Android IPones4s 下运行正常
- 计算机网络基础 单选题) 作业,南开大学《计算机网络基础》在线作业及答案
- 在数据库‘master’中拒绝CREATE DATABASE权限 的问题
- Hibernate HQL基础 调用数据库存储过程
- [转载]VC++程序员应当如何阅读ADO文档
- 计算机网络之网络概述:1、基本概念
- 被哥哥巨额索赔56亿?贾跃亭回应:40多亿为联合担保
- idea+maven打包Java项目
- 关于解决Server Tomcat v9.0 Server at localhost failed to start的问题
- 简单的MySql游标创建
- Ubuntu16.04下基于opencv--实现图像SIFT特征与全景图片的生成
- 在python3.X中执行python manage.py migrate命令的坑
- c语言一个字符串怎么做除法,c语言实数除法怎样保留小数部分
- 各版本JQuery文件下载
- Python初学笔记(4)
- gps掩星计算matlab,《GPS测量与数据处理》_李征航_武汉大学出版社.pdf
- Marvell同意向卡耐基梅隆支付7.5亿美元了结专利诉讼
- CBDB中国历代人物历史可视化系统
- javaweb重定向——登录页面跳转到首页
热门文章
- java dct变换_Discrete Cosine Transform [DCT] (离散余弦变换)
- linux日志添加到文件,关于linux:将变量中的内容追加到日志文件中
- java将一个对象赋值给另一个对象_java一个对象赋值给另一个对象,支持平铺类和层级类间的互转...
- python画图删除上边框和右边框
- numpy.ndarray索引/切片方式
- 《Python 黑科技》程序员必须会的代理ip小技巧
- git 撤销修改:未push 、已push
- Android Intent 用法总结
- 简明Python教程学习笔记_1_基本
- Lambda 表达式详解~Streams API~规约操作