原题如下:
小C来到了一家餐馆,准备点一些菜。
已知该餐馆有 nn 道菜,第 ii 道菜的售价为 wiwi。
小C准备点一些价格相同的菜,但小C不会点单价超过 mm 的菜。
小C想知道,自己最多可以点多少道菜?
解题思路详解
1. 理解问题
在这个问题中,小C来到了一家餐馆,准备点一些菜。餐馆有 n 道菜,每道菜的售价各不相同。小C有一个限制条件,即他不会点单价超过 m 的菜。小C想要知道他最多可以点多少道价格相同的菜。
简而言之,我们需要解决的问题是:在给定的价格列表中找到不超过 m 的价格中,哪一个价格对应的菜品数量最多。
2. 数据结构选择
为了有效地解决这个问题,我们需要一种数据结构来统计每种价格的菜的数量。在这里,使用字典(在Python中称为dict)是最合适的选择,因为字典允许我们根据价格(键)快速查找对应的菜品数量(值)。
- 字典的优势:字典可以在常数时间内(O(1))完成查找、插入和更新操作,这使得我们能够高效地统计每种价格对应的菜品数量。
3. 算法步骤
根据问题的要求和选择的数据结构,我们可以按照以下步骤来实现算法:
- 初始化字典:创建一个空字典,用于存储每种价格及其对应的菜品数量。
- 遍历所有菜的价格:对于餐馆中的每一道菜,检查其价格是否不超过
m。如果不超过,就在字典中更新该价格对应的菜品数量。如果价格已经在字典中,则数量加1;如果不在,则将该价格添加到字典中,并将数量设置为1。 - 找出数量最多的价格:遍历字典,找到数量最多的价格及其对应的菜品数量。这个步骤可以通过一次遍历字典来完成,同时记录数量最大的值及其对应的键(价格)。
- 输出结果:输出数量最多的价格对应的菜品数量,这就是小C最多可以点的相同价格的菜品数量。
代码如下: `
def solution(m: int, w: list) -> int:
# 创建一个字典来统计每种价格的菜的数量
price_count = {}
# 遍历所有菜的价格
for price in w:
if price <= m: # 只统计价格不超过 m 的菜
if price in price_count:
price_count[price] += 1
else:
price_count[price] = 1
# 找出价格不超过 m 的菜中,数量最多的那一组
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来统计每种价格的菜的数量。 - 过滤价格:只统计价格不超过
m的菜。 - 找出最大数量:遍历字典的值,找出数量最多的那一组。