Set统计分析有多少种花色

lxf2023-03-17 18:11:01

真题连接: leetcode.cn/problems/be…

了解句意:

  1. 有五张同样花色扑克游戏,与五张扑克游戏只有一种颜色含意同样
  2. 五张尺寸互相不同样的扑克游戏,与一共有五种大小的小扑克游戏含意同样
  3. 该题要区别颜色和尺寸各自统计数量

解题技巧

  1. 首先用Set统计分析共有多少种花色,如果仅仅是一种,表明有“五张同样花色扑克游戏”
  2. Map统计分析每一种大小的小扑克游戏一共有多张
    • 假如rankMap.size5,表明有“五张尺寸互相不同样的扑克游戏”
    • 假如rankMap含有牌的总数高于或等于3,即是“三条”
    • 假如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)