问题解析
问题描述
小C来到了一家餐馆,准备点一些菜。
已知该餐馆有 n 道菜,第 i 道菜的售价为 wi。
小C准备点一些价格相同的菜,但小C不会点单价超过 m 的菜。
小C想知道,自己最多可以点多少道菜?
小C来到了一家餐馆,准备点一些菜。
好的,让我们来逐步解决这个问题。首先,我们需要理解题目的要求:找到价格不超过 m 的菜中,数量最多的那一组菜的数量。
问题理解
小C想要点一些价格相同的菜,并且这些菜的价格不能超过给定的上限 m。我们需要找出在满足这个条件下,小C最多可以点多少道菜。
数据结构选择
- 过滤价格不超过
m的菜:我们可以使用列表推导式来过滤出所有价格不超过m的菜。 - 统计每种价格的菜的数量:我们可以使用字典来统计每种价格的菜的数量。
- 找到数量最多的那一组:我们可以遍历字典的值,找到数量最多的那一组。
算法步骤
- 过滤价格不超过
m的菜:使用列表推导式过滤出所有价格不超过m的菜。 - 统计每种价格的菜的数量:遍历过滤后的列表,使用字典统计每种价格的菜的数量。
- 找到数量最多的那一组:遍历字典的值,找到数量最多的那一组。
解题思路
- 过滤价格不超过
m的菜:首先,我们可以过滤掉所有价格超过m的菜,因为这些菜不符合小C的要求。 - 统计每种价格的菜的数量:对于价格不超过
m的菜,我们需要统计每种价格的菜的数量。 - 找到数量最多的那一组:最后,我们从这些统计结果中找到数量最多的那一组菜的数量。
代码提示
我们可以使用一个字典来统计每种价格的菜的数量,然后遍历这个字典找到数量最多的那一组。
def solution(m: int, w: list) -> int:
# 过滤价格不超过 m 的菜
valid_prices = [price for price in w if price <= m]
# 统计每种价格的菜的数量
price_count = {}
for price in valid_prices:
if price in price_count:
price_count[price] += 1
else:
price_count[price] = 1
# 找到数量最多的那一组
max_count = 0
for count in price_count.values():
if count > max_count:
max_count = count
return max_count
if __name__ == '__main__':
print(solution(6, [2, 3, 3, 6, 6, 6, 9, 9, 23]) == 3)
print(solution(4, [1, 2, 4, 4, 4]) == 3)
print(solution(5, [5, 5, 5, 5, 6, 7, 8]) == 4)
关键步骤解释
- 过滤价格不超过
m的菜:使用列表推导式[price for price in w if price <= m]来过滤掉价格超过m的菜。 - 统计每种价格的菜的数量:使用字典
price_count来统计每种价格的菜的数量。 - 找到数量最多的那一组:遍历字典的值,找到最大的数量。 好的,让我们来分析一下这个问题。