刷题分享(一)小C点菜问题 | 豆包MarsCode AI刷题

129 阅读4分钟

题目:小C点菜问题

1、题目描述

小C来到了一家餐馆,准备点一些菜。

已知该餐馆有 n 道菜,第 i 道菜的售价为 wi。

小C准备点一些价格相同的菜,但小C不会点单价超过 m 的菜。

小C想知道,自己最多可以点多少道菜?

2、测试用例

样例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

3、解题思路

(1)问题理解

由题可知,餐厅的菜单数量和价格由我们输入,小C选择想要的菜品单价,由我们编写一段代码来筛选菜单价格里面小于或者等于小C选择的菜品价格的菜品数量并且选中菜单还需满足重复这一要求。

所以我们要根据小C想要的菜品的价格,从所有菜单中选出一些价格相同的菜,并且这些菜的价格不能超过给定的上限价格‘m’。我们需要找出在满足这个条件下,小C最多可以点多少道菜。

(2)数据结构选择

根据对这道题目的分析,我首先反应是应该选择数组的形式进行存储菜单中菜品的价格。由于需要找出价格相同的菜,选择使用哈希表(即字典)来统计每个价格出现的次数,这样可以快速地对每个价格进行计数。在统计完每个价格出现的次数后,需要对这些价格进行筛选,只保留小于或等于‘m’的价格。筛选后,遍历哈希表,找出出现次数最多的价格,这个次数就是小C最多可以点的菜的数量。

数据结构——哈希表(字典):

哈希表是一种通过键(key)来存储和检索值(value)的数据结构。在Python中,字典(dict)是一种内置的哈希表实现。哈希表提供了快速的查找、插入和删除操作,其平均时间复杂度为O(1)。在这个问题中,哈希表用于:

a. 统计频次:通过将每个菜的价格作为键,出现次数作为值,我们可以快速统计每个价格的出现频次;

b. 快速筛选:哈希表允许我们快速检查某个价格是否已经出现过,以及它出现的次数。

(3)代码编写步骤

a. 遍历价格数组:统计每种价格的菜的数量,并将结果存储在哈希表中;

b. 筛选价格:遍历哈希表,只考虑价格不超过‘m’的菜;

c. 找出最大数量:在筛选后的价格中,找出数量最多的那个,即为小C最多可以点的菜的数量。

(4)代码详解

def solution(m: int, w: list) -> int:
    # 定义一个哈希表,用于统计各个菜品的价格
    price_count = {}
    # 循环遍历菜单数组,寻找小于m的价格,如果存在,则在相应的表里面加一个,不存在则该表数量为1
    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

4、试题经验总结

通过这个问题,我们不仅学习了如何使用哈希表来统计频次和筛选数据,还学习了如何通过算法来寻找满足特定条件的最大值。这些问题的解决方法在计算机科学和软件开发中非常常见,掌握它们对于解决实际问题非常有帮助。此外,这个问题也提醒我们在设计算法时要考虑时间复杂度和空间复杂度,以实现最优的性能。

该题目:

时间复杂度O(n)(其中n为菜品的数量)

空间复杂度O(n)(其中n为菜品的数量)