AI刷题 小C点菜问题 | 豆包MarsCode AI刷题

62 阅读2分钟

问题描述

小C来到了一家餐馆,面对着丰富的菜单,他决定点一些菜来享用。餐馆提供了n道菜,每道菜都有一个确定的售价,用数组w表示,其中第i个元素wi就是第i道菜的售价。小C有一些点菜的规则:他只点价格相同的菜,并且不会点单价超过m的菜。小C想要知道,在这些限制条件下,他最多可以点多少道菜。

这个问题实际上是在询问,在给定的售价数组w中,有多少种不同的价格(每种价格不超过m),以及每种价格中有多少道菜。小C想要点的菜的数量就是这些相同价格的菜中数量最多的那个。

思路解析

解决这个问题的关键在于统计每种价格的菜的数量,并找出不超过m的价格中,数量最多的那种价格对应的菜的数量。

统计价格的规律:

  1. 首先,我们需要遍历售价数组w,统计每种价格的出现次数。
  2. 然后,我们只考虑那些价格不超过m的菜。
  3. 最后,我们找出这些符合条件的价格中,出现次数最多的那个数量。

最优方案:

最理想的情况是直接通过一次遍历来统计每种价格的出现次数,然后直接找出符合条件的最大值。

如何优化计算:

我们可以使用一个哈希表(或字典)来统计每种价格的出现次数,这样可以在O(n)的时间复杂度内完成统计。然后,我们遍历这个哈希表,找出不超过m的价格中,出现次数最多的那个。

解题步骤

  1. 创建一个空的哈希表(或字典)来存储每种价格及其对应的菜的数量。
  2. 遍历售价数组w,对于每个售价wi:
    • 如果wi不超过m,更新哈希表中wi的计数。
  3. 初始化一个变量maxDishes来存储最大菜的数量,初始值为0。
  4. 遍历哈希表,对于每个价格和对应的菜的数量:
    • 如果这个价格的菜的数量大于maxDishes,则更新maxDishes。
  5. 返回maxDishes作为结果。

复杂度分析

时间复杂度:O(n)。我们需要遍历售价数组w一次,以及哈希表一次,因此时间复杂度与数组w的长度成正比。 空间复杂度:O(k)。其中k是不同价格的数量。在最坏的情况下,如果所有价格都不同,那么k可以接近n,因此空间复杂度与不同价格的数量成正比。在平均情况下,k会远小于n,因此空间复杂度会更低。