写点什么

LeetCode 题解:2347. 最好的扑克手牌,哈希表,详细注释

作者:Lee Chen
  • 2023-02-20
    福建
  • 本文字数:654 字

    阅读完需:约 2 分钟

LeetCode题解:2347. 最好的扑克手牌,哈希表,详细注释

原题链接:https://leetcode.cn/problems/best-poker-hand/


理解题意:


  1. 有五张相同花色的扑克牌,与五张扑克牌只有一种花色意思相同

  2. 五张大小互不相同的扑克牌,与共有五种大小的扑克牌意思相同

  3. 该题要区分花色和大小分别统计数量


解题思路:


  1. 先用Set统计共有多少种花色,如果只有一种,表示有“五张相同花色的扑克牌”

  2. Map统计每种大小的扑克牌共有几张

  3. 如果rankMap.size5,表示有“五张大小互不相同的扑克牌”

  4. 如果rankMap中有牌的数量大于等于3,即为“三条”

  5. 如果rankMap有牌的数量等于2,即为“对子”


/** * @param {number[]} ranks * @param {character[]} suits * @return {string} */var bestHand = function (ranks, suits) {  // 使用Set统计有多少种花色  let suitSet = new Set()
for (const suit of suits) { suitSet.add(suit) }
// 如果只有一种花色,表示同种花色有5张 if (suitSet.size === 1) { return 'Flush' }
// 使用Map统计每种大小牌的数量 let rankMap = new Map()
for (const rank of ranks) { rankMap.set(rank, (rankMap.get(rank) ?? 0) + 1) }
// 如果有五种大小,表示有五张大小互不相同的扑克牌 if (rankMap.size === 5) { return 'High Card' }
// 查看不同大小的牌都有几张 for (const count of rankMap.values()) { // 大等于3张都为“三条” if (count >= 3) { return 'Three of a Kind' } }
// 剩下的只有“对子”一种可能 return 'Pair'}
复制代码


复杂度分析


  • 时间复杂度:O(n)

  • 空间复杂度:O(n)

发布于: 刚刚阅读数: 3
用户头像

Lee Chen

关注

还未添加个人签名 2018-08-29 加入

还未添加个人简介

评论

发布
暂无评论
LeetCode题解:2347. 最好的扑克手牌,哈希表,详细注释_JavaScript_Lee Chen_InfoQ写作社区