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

2 阅读3分钟

一:问题详细说明

问题描述

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

已知该餐馆有 nn 道菜,第 ii 道菜的售价为 wiwi​。

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

小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

二:问题详细分析:

这个题目的要求是:

  • 小C需要在餐馆点菜,每道菜有一个价格。
  • 小C只会点价格不超过 m 的菜。
  • 小C想知道他可以点多少道价格相同的菜(即最多可以点某个价格的菜多少道)。

解题思路大致可以分为以下的几步:

  1. 数据预处理

    • 首先,我们需要过滤掉所有价格超过 m 的菜品,因为这些菜品不在小C的考虑范围内。
  2. 数据统计

    • 接下来,我们需要统计剩余菜品中每个价格出现的频率。这可以通过使用哈希表(在Java中通常是HashMap)来实现,其中键是价格,值是该价格出现的次数。
  3. 找出最大频率

    • 遍历哈希表,找出出现次数最多的价格(即频率最高的价格)。这个频率就是小C可以点的最多菜品数量。
  4. 输出结果

    • 返回找到的最大频率值。

详细的解题代码如下所示:

import java.util.HashMap; import java.util.Map; public class Main { public static long solution(int m, int[] w) { // 使用HashMap来记录每个价格的出现频率 // 知识点:HashMap的使用,包括put方法和getOrDefault方法 Map<Integer, Integer> priceFrequency = new HashMap<>(); // 过滤并统计价格频率 // 知识点:for循环,if条件判断,HashMap的更新操作 for (int price : w) { if (price <= m) { // 只考虑价格不超过m的菜品 priceFrequency.put(price, priceFrequency.getOrDefault(price, 0) + 1); // 如果价格已经存在于HashMap中,则将其对应的值(出现次数)加1; // 如果价格不存在于HashMap中,则将其添加到HashMap中,并将对应的值设置为1(表示第一次出现) } } // 找出频率最高的价格次数 // 知识点:for-each循环(或称为增强型for循环),int类型的最大值初始化,if条件判断 int maxFrequency = 0; for (int frequency : priceFrequency.values()) { if (frequency > maxFrequency) { maxFrequency = frequency; // 更新maxFrequency为当前遍历到的最大频率值 } } // 输出结果 // 知识点:方法返回值的设定 return maxFrequency; } public static void main(String[] args) { // 测试样例,验证solution方法的正确性 // 知识点:System.out.println的使用,方法调用的返回值比较 System.out.println(solution(6, new int[]{2, 3, 3, 6, 6, 6, 9, 9, 23}) == 3); System.out.println(solution(4, new int[]{1, 2, 4, 4, 4}) == 3); System.out.println(solution(5, new int[]{5, 5, 5, 5, 6, 7, 8}) == 4); } }

三:所考察的知识点总结

  • HashMap的使用:包括创建HashMap实例,使用put方法添加或更新键值对,使用getOrDefault方法获取键对应的值(如果不存在则返回默认值)。
  • for循环和if条件判断:用于遍历数组和进行条件判断。
  • for-each循环:用于遍历HashMap的值集合。
  • 方法返回值:定义一个方法时,需要指定其返回类型,并在方法体中使用return语句返回相应的值。
  • System.out.println的使用:用于在控制台输出信息,通常用于调试和验证程序输出。