当前位置: 首页 > article >正文

豆包MarsCode:小C点菜问题

问题描述

在这里插入图片描述


思路分析

这道题的核心任务是找出所有不超过给定价格 m 的菜肴中,最常见的菜肴价格,最后返回该价格的出现次数。

1. 题意理解:

  • 给定一个最大价格 m,小C只会选择价格不超过 m 的菜。
  • 菜单上有 n 道菜,每道菜有一个价格,价格用数组 w 存储。
  • 需要找出价格不超过 m 的菜中,最多可以点多少道价格相同的菜。

2. 解题步骤:

  • 过滤价格:首先,我们要从价格数组中筛选出所有小于或等于 m 的价格,因为小C只会选择这些价格的菜。
  • 统计频率:然后,对这些符合条件的菜的价格进行统计,找出每个价格出现的次数。
  • 找出最大频率:最终,我们找出出现次数最多的价格,并返回这个最大次数。

3. 实现方法:

  • 遍历菜肴价格:我们需要遍历菜单上的每道菜,检查价格是否小于或等于 m。如果符合条件,就记录下它的频率。
  • 使用哈希表(HashMap):我们使用一个哈希表来存储价格和对应的频率。哈希表的键是价格,值是该价格出现的次数。
  • 找出最大值:遍历哈希表,找出出现次数最多的价格,最后返回该次数。

哈希表相关方法可见:一篇文章让你学会Java之哈希表操作


参考代码(Java)

import java.util.HashMap;

public class Main {
    public static long solution(int m, int[] w) {
        // 用于存储价格 <= m 的频率
        HashMap<Integer, Integer> priceCount = new HashMap<>();
        
        // 统计价格 <= m 的频率
        for (int price : w) {
            if (price <= m) {
                priceCount.put(price, priceCount.getOrDefault(price, 0) + 1);
            }
        }
        
        // 找到最大频率
        int maxCount = 0;
        for (int count : priceCount.values()) {
            maxCount = Math.max(maxCount, count);
        }
        
        return maxCount;
    }

    public static void main(String[] args) {
        // 测试用例
        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); 
    }
}

代码分析

solution 方法:

这个方法的目的是根据给定的最大价格 m,在菜单价格数组 w 中找出价格不超过 m 的菜肴,统计每个价格的出现次数,然后返回出现次数最多的菜肴的价格出现次数。

  • 输入参数

    • m: 这是小C可以接受的最大价格。
    • w: 一个整数数组,代表餐馆菜单中每道菜的价格。
  • 返回值

    • 返回一个整数,表示价格最常出现的次数。
1. 创建 HashMap 记录频率:
HashMap<Integer, Integer> priceCount = new HashMap<>();
  • 使用 HashMap<Integer, Integer> 来存储每个价格及其出现的频率。键是菜品的价格,值是该价格出现的次数。
2. 遍历价格数组 w 并统计频率:
for (int price : w) {
    if (price <= m) {
        priceCount.put(price, priceCount.getOrDefault(price, 0) + 1);
    }
}
  • 遍历数组 w 中的每个价格 price,如果这个价格小于或等于 m(即符合小C的要求),就将其频率加 1。
  • priceCount.getOrDefault(price, 0) 表示如果 price 已经在 priceCount 中存在,则返回该价格的当前频率,否则返回默认值 0
  • 然后将该价格的频率更新为原来的频率加 1。
3. 找出最大频率:
int maxCount = 0;
for (int count : priceCount.values()) {
    maxCount = Math.max(maxCount, count);
}
  • 遍历 priceCount 中的所有频率值,找到其中最大的频率。
  • Math.max(maxCount, count) 用来更新 maxCount,保留最大频率。
4. 返回最大频率:
return maxCount;
  • 最后返回最大频率,即小C可以选择的最多价格相同的菜肴的数量。

总结:

  • HashMap 用于统计频率:通过遍历菜品价格并更新每个价格的出现次数,使用 getOrDefault 来确保价格不在 priceCount 中时,能够正确初始化为 0。
  • 最大频率的查找:通过遍历哈希表的所有值,找到最大的频率,最后返回。
  • 时间复杂度:遍历数组 w 和哈希表的操作,整体时间复杂度是 O(n),其中 n 是菜单价格的数量。

http://www.kler.cn/a/516286.html

相关文章:

  • OpenStack基础架构
  • 如何实现各种类型的进度条
  • IPhone16 Pro 设备详情
  • 【2024年华为OD机试】(A卷,200分)- 简单的解压缩算法 (JavaScriptJava PythonC/C++)
  • .NET 9 微软官方推荐使用 Scalar 替代传统的 Swagger
  • MySQL可直接使用的查询表的列信息
  • 左/右侧边栏布局(Semi design)
  • FPGA实现任意角度视频旋转(二)视频90度/270度无裁剪旋转
  • react antd点击table单元格文字下载指定的excel路径
  • Conmi的正确答案——Rider中引入WebView2包(C#)
  • Django 日志配置实战指南
  • .NET 9 微软官方推荐使用 Scalar 替代传统的 Swagger
  • 【项目初始化】自定义异常处理
  • 终极的复杂,是简单
  • PVE 虚拟机安装 Debian 无图形化界面服务器
  • 【后端开发】字节跳动青训营之Go语言进阶与依赖管理
  • Elementor Pro 3.27 汉化版 2100套模板 安装教程 wordpress主题中文编辑器插件免费下载
  • 缓存-Redis-数据结构-redis哪些数据结构是跳表实现的?
  • Node.js的解释
  • Charles 4.6.7 浏览器网络调试指南:基本界面与操作(二)
  • Vue 全局自适应大小:使用 postcss-pxtorem
  • [MySQL]数据类型以及表的属性与操作大全
  • linux虚拟机连接不上Xshell
  • NLP自然语言处理中Word2Vec和GloVe概述
  • 豆瓣Top250电影的数据采集与可视化分析(scrapy+mysql+matplotlib)
  • MongoDB 数据库备份和恢复全攻略