一:问题详细说明
问题描述
`小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想知道他可以点多少道价格相同的菜(即最多可以点某个价格的菜多少道)。
解题思路大致可以分为以下的几步:
-
数据预处理:
- 首先,我们需要过滤掉所有价格超过
m
的菜品,因为这些菜品不在小C的考虑范围内。
- 首先,我们需要过滤掉所有价格超过
-
数据统计:
- 接下来,我们需要统计剩余菜品中每个价格出现的频率。这可以通过使用哈希表(在Java中通常是
HashMap
)来实现,其中键是价格,值是该价格出现的次数。
- 接下来,我们需要统计剩余菜品中每个价格出现的频率。这可以通过使用哈希表(在Java中通常是
-
找出最大频率:
- 遍历哈希表,找出出现次数最多的价格(即频率最高的价格)。这个频率就是小C可以点的最多菜品数量。
-
输出结果:
- 返回找到的最大频率值。
详细的解题代码如下所示:
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的使用:用于在控制台输出信息,通常用于调试和验证程序输出。