文章目录

  • 题目描述
  • 思路 & 代码
    • 二刷

题目描述

  • 感觉算比较有意思的简单题了,耗了不少时间优化= =

思路 & 代码

  • 这次注释写得比较详细,直接看注释吧~
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、哈希表)相关推荐

  1. 【LeetCode】剑指 Offer 61. 扑克牌中的顺子

    [LeetCode]剑指 Offer 61. 扑克牌中的顺子 文章目录 [LeetCode]剑指 Offer 61. 扑克牌中的顺子 一.集合Set + 遍历 二.排序 + 遍历 总结 解题思路 根据 ...

  2. 【算法】剑指 Offer 61. 扑克牌中的顺子 【重刷】

    文章目录 1.概述 2.方案 2.1 想减法(自研) 2.2 set 2.3 排序 1.概述 从若干副扑克牌中随机抽 5 张牌,判断是不是一个顺子,即这5张牌是不是连续的.2-10为数字本身,A为1, ...

  3. 剑指 Offer 61. 扑克牌中的顺子

    这题的算法是,只要满足下面的条件即可视为连续 1.无重复 2.除了0以外,最大值和最小值的差不超过4

  4. 【LeetCode】剑指 Offer 51. 数组中的逆序对

    [LeetCode]剑指 Offer 51. 数组中的逆序对 文章目录 [LeetCode]剑指 Offer 51. 数组中的逆序对 package offer;public class Soluti ...

  5. 【LeetCode】剑指 Offer 41. 数据流中的中位数

    [LeetCode]剑指 Offer 41. 数据流中的中位数 文章目录 [LeetCode]剑指 Offer 41. 数据流中的中位数 package offer;import java.util. ...

  6. 【LeetCode】剑指 Offer 56. 数组中数字出现的次数

    [LeetCode]剑指 Offer 56. 数组中数字出现的次数 文章目录 [LeetCode]剑指 Offer 56. 数组中数字出现的次数 package offer;import java.u ...

  7. 【LeetCode】剑指 Offer 39. 数组中出现次数超过一半的数字

    [LeetCode]剑指 Offer 39. 数组中出现次数超过一半的数字 文章目录 [LeetCode]剑指 Offer 39. 数组中出现次数超过一半的数字 一.摩尔投票法 一.摩尔投票法 核心理 ...

  8. 【LeetCode】剑指 Offer 62. 圆圈中最后剩下的数字

    [LeetCode]剑指 Offer 62. 圆圈中最后剩下的数字 文章目录 [LeetCode]剑指 Offer 62. 圆圈中最后剩下的数字 一.动态规划 总结 一.动态规划 构建一个长度为 n ...

  9. 【LeetCode】剑指 Offer 22. 链表中倒数第k个节点

    [LeetCode]剑指 Offer 22. 链表中倒数第k个节点 文章目录 [LeetCode]剑指 Offer 22. 链表中倒数第k个节点 一.遍历 二.双指针 总结 一.遍历 先遍历统计链表长 ...

  10. 【LeetCode】剑指 Offer 43. 1~n 整数中 1 出现的次数

    [LeetCode]剑指 Offer 43. 1-n 整数中 1 出现的次数 文章目录 [LeetCode]剑指 Offer 43. 1-n 整数中 1 出现的次数 package offer;pub ...

最新文章

  1. 需要单机还是集群部署_5000W如何玩转Filecoin市场 部署最符合企业的集群模式
  2. 虚拟手柄控制的小车 air3.4 Android IPones4s 下运行正常
  3. 计算机网络基础 单选题) 作业,南开大学《计算机网络基础》在线作业及答案
  4. 在数据库‘master’中拒绝CREATE DATABASE权限 的问题
  5. Hibernate HQL基础 调用数据库存储过程
  6. [转载]VC++程序员应当如何阅读ADO文档
  7. 计算机网络之网络概述:1、基本概念
  8. 被哥哥巨额索赔56亿?贾跃亭回应:40多亿为联合担保
  9. idea+maven打包Java项目
  10. 关于解决Server Tomcat v9.0 Server at localhost failed to start的问题
  11. 简单的MySql游标创建
  12. Ubuntu16.04下基于opencv--实现图像SIFT特征与全景图片的生成
  13. 在python3.X中执行python manage.py migrate命令的坑
  14. c语言一个字符串怎么做除法,c语言实数除法怎样保留小数部分
  15. 各版本JQuery文件下载
  16. Python初学笔记(4)
  17. gps掩星计算matlab,《GPS测量与数据处理》_李征航_武汉大学出版社.pdf
  18. Marvell同意向卡耐基梅隆支付7.5亿美元了结专利诉讼
  19. CBDB中国历代人物历史可视化系统
  20. javaweb重定向——登录页面跳转到首页

热门文章

  1. java dct变换_Discrete Cosine Transform [DCT] (离散余弦变换)
  2. linux日志添加到文件,关于linux:将变量中的内容追加到日志文件中
  3. java将一个对象赋值给另一个对象_java一个对象赋值给另一个对象,支持平铺类和层级类间的互转...
  4. python画图删除上边框和右边框
  5. numpy.ndarray索引/切片方式
  6. 《Python 黑科技》程序员必须会的代理ip小技巧
  7. git 撤销修改:未push 、已push
  8. Android Intent 用法总结
  9. 简明Python教程学习笔记_1_基本
  10. Lambda 表达式详解~Streams API~规约操作