问题描述
小C来到了一家餐馆,准备点一些菜。
已知该餐馆有 𝑛n 道菜,第 𝑖i 道菜的售价为 𝑤𝑖wi。
小C准备点一些价格相同的菜,但小C不会点单价超过 𝑚m 的菜。
小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
代码呈现
from collections import Counter
def solution(m: int, w: list) -> int:
# 筛选出价格不超过 m 的菜品
filtered_dishes = [price for price in w if price <= m]
# 使用 Counter 统计每种价格的数量
price_count = Counter(filtered_dishes)
# 找到最大数量的菜品
max_count = max(price_count.values(), default=0)
return max_count
if __name__ == '__main__':
print(solution(6, [2, 3, 3, 6, 6, 6, 9, 9, 23]) == 3) # 输出: True
print(solution(4, [1, 2, 4, 4, 4]) == 3) # 输出: True
print(solution(5, [5, 5, 5, 5, 6, 7, 8]) == 4) # 输出: True
小C的问题可以转化为在价格不超过m的前提下,找到价格相同的一组菜中数量最多的情况。
解题思路:
- 统计价格频率:首先,我们需要统计每道菜的价格出现的频率,即每种价格有多少道菜。
- 筛选价格:然后,我们需要筛选出所有价格不超过m的菜。
- 找出最大数量:在筛选出的菜中,找出数量最多的一组,即频率最高的价格。
以下是具体的步骤:
-
初始化一个数组或哈希表:用来记录每种价格出现的次数。数组的索引可以代表价格,数组的值代表该价格出现的次数。
-
遍历菜单:对于菜单中的每一道菜,如果其价格不超过m,就在对应的价格索引处增加计数。
-
找出最大值:遍历统计后的数组或哈希表,找出最大的计数,这个计数就是小C最多可以点的相同价格菜的道数。