要解决这个问题,我们需要按照以下步骤进行:
-
理解牌的排名顺序:
- 排名顺序为:A(1)> K(13)> Q(12)> J(11)> 10 > 9 > ... > 2。
- 注意,虽然A的数值为1,但在排名上它是最高的。
-
统计每种牌的数量:
- 使用字典或数组来记录每种牌出现的次数。
-
遍历可能的三张相同牌(a)和两张相同牌(b) :
- 按照排名顺序,从最高到最低遍历可能的a。
- 对于每一个a,再按照排名顺序遍历可能的b,确保b不同于a。
- 检查3a + 2b是否小于等于给定的最大值
max。
-
返回第一个满足条件的[a, b]组合:
- 一旦找到满足条件的组合,就立即返回,因为我们是按照排名顺序遍历的,确保了找到的组合是最大的。
-
如果没有找到符合条件的组合,返回[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。
- 如果