小c点菜问题python代码解法

79 阅读2分钟

问题描述

小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的前提下,找到价格相同的一组菜中数量最多的情况。

解题思路:

  1. 统计价格频率:首先,我们需要统计每道菜的价格出现的频率,即每种价格有多少道菜。
  2. 筛选价格:然后,我们需要筛选出所有价格不超过m的菜。
  3. 找出最大数量:在筛选出的菜中,找出数量最多的一组,即频率最高的价格。

以下是具体的步骤:

  1. 初始化一个数组或哈希表:用来记录每种价格出现的次数。数组的索引可以代表价格,数组的值代表该价格出现的次数。

  2. 遍历菜单:对于菜单中的每一道菜,如果其价格不超过m,就在对应的价格索引处增加计数。

  3. 找出最大值:遍历统计后的数组或哈希表,找出最大的计数,这个计数就是小C最多可以点的相同价格菜的道数。