问题描述
小C来到了一家餐馆,准备点一些菜。已知该餐馆有n道菜,第i道菜的售价为wi。小C准备点一些价格相同的菜,但小C不会点单价超过m的菜。小C想知道,自己最多可以点多少道菜。
输入与输出
- 输入:两个参数,m(1 ≤ m ≤ 100)表示小C的预算,w(1 ≤ w[i] ≤ 100)表示每道菜的价格,且w的长度不超过100。
- 返回:一个整数,表示小C最多可以点多少道菜。
测试样例
- 样例1:输入m = 6, w = [2, 3, 3, 6, 6, 6, 9, 9, 23],输出3。
- 样例2:输入m = 4, w = [1, 2, 4, 4, 4],输出3。
- 样例3:输入m = 5, w = [5, 5, 5, 5, 6, 7, 8],输出4。
解题思路
这个问题的关键在于统计每种价格的菜的数量,并找出不超过预算的情况下,哪种价格的菜可以点的最多。
- 过滤超过预算的菜:首先,我们需要过滤掉所有超过预算的菜,因为小C不会点这些菜。
- 统计每种价格的菜的数量:然后,我们统计每种价格的菜的数量。
- 找出最多的数量:最后,我们找出所有价格中,可以点的最多的菜的数量。
代码实现
def solution(m: int, w: list) -> int:
price_count = {}
for price in w:
if price <= m: # 过滤超过预算的菜
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)
代码解析
- 初始化字典:我们使用一个字典
price_count来存储每种价格的菜的数量。 - 遍历菜的价格:我们遍历每道菜的价格,如果价格不超过预算,就更新字典中对应的数量。
- 找出最多的数量:我们遍历字典中的所有值,找出最大的数量,这个数量就是小C最多可以点的菜的数量。
- 返回结果:最后,我们返回这个最大的数量。