寻找最大葫芦 | 豆包MarsCode AI刷题

199 阅读2分钟

要解决这个问题,我们需要按照以下步骤进行:

  1. 理解牌的排名顺序

    • 排名顺序为:A(1)> K(13)> Q(12)> J(11)> 10 > 9 > ... > 2。
    • 注意,虽然A的数值为1,但在排名上它是最高的。
  2. 统计每种牌的数量

    • 使用字典或数组来记录每种牌出现的次数。
  3. 遍历可能的三张相同牌(a)和两张相同牌(b)

    • 按照排名顺序,从最高到最低遍历可能的a。
    • 对于每一个a,再按照排名顺序遍历可能的b,确保b不同于a。
    • 检查3a + 2b是否小于等于给定的最大值max
  4. 返回第一个满足条件的[a, b]组合

    • 一旦找到满足条件的组合,就立即返回,因为我们是按照排名顺序遍历的,确保了找到的组合是最大的。
  5. 如果没有找到符合条件的组合,返回[0, 0]

这道题要注意的地方在于A的牌面值为1,但是它是最大的,所以很有可能会在三个牌的选择中,所以要考虑这个特殊情况。

参考这个样例:

  • 测试用例输入: n = 17,max = 87,array = [13,4,1,7,8,9,1,7,10,7,13,13,1,10,13,9,7]
  • 预期输出: [1,13]
def solution(n, max, array):
    from collections import Counter
    rank_order = [1,13,12,11,10,9,8,7,6,5,4,3,2]
    cnts = Counter(array)
    for a in rank_order:
        if cnts.get(a,0) >=3:
            for b in rank_order:
                if b==a:
                    continue
                if cnts.get(b,0) >=2:
                    total = 3*a+2*b
                    if total <= max:
                        return [a,b]
    
    return [0,0]

get(a, 0) 是 Python 中字典(dict)对象的一种方法,用于安全地访问字典中的值。让我们详细解释一下它的含义和用途。

字典的 get 方法

在 Python 中,字典是一种用于存储键值对的数据结构。你可以通过键来访问对应的值。例如:

python
复制代码
my_dict = {'apple': 5, 'banana': 3}
print(my_dict['apple'])  # 输出: 5
print(my_dict['banana'])  # 输出: 3

然而,如果你尝试访问一个不存在的键,会引发一个 KeyError 错误:

python
复制代码
print(my_dict['cherry'])  # 这将引发 KeyError

为了避免这种错误,字典提供了 get 方法,它允许你在键不存在时返回一个默认值。

get(a, 0) 的具体含义

在之前的代码中,我们有一行:

python
复制代码
count.get(a, 0)

这里,count 是一个字典(通常是 collections.Counter 对象),a 是我们要查找的键,0 是默认值。

  • count.get(a, 0) 的意思是:

    • 如果 a 存在于 count 字典中,则返回 count[a] 的值。
    • 如果 a 不存在于 count 字典中,则返回默认值 0