贪心-小c点菜问题

问题描述

小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在餐馆中最多可以点多少道单价不超过 m 且价格相同的菜。

思路

  1. 限定价格 :小C只能点单价不超过 m 的菜,所以我们可以先过滤掉所有价格大于 m 的菜。

  2. 统计同样价格的菜的数量:我们需要统计剩下的菜中每种价格出现的次数,然后找出最多的那一类。

  3. 数据处理

    • 首先遍历菜品价格数组,过滤掉价格大于 m 的菜。
    • 然后统计每种价格出现的次数。
    • 返回出现次数最多的价格对应的数量。

解题步骤

  1. 过滤价格 :通过 std::vector 遍历价格数组,将价格大于 m 的菜去除。

  2. 统计频次 :可以使用 std::unordered_map 来记录每种菜品的价格出现的次数。

  3. 返回最大值:遍历频次统计,找出出现次数最多的价格的数量。

代码实现

代码解释

  1. unordered_map<int, int> price_count;

    • 这个哈希表用于存储每个价格 price 对应的菜的数量。键是价格,值是该价格的菜品数量。
  2. 遍历菜品价格 w

    • 对于每个菜的价格,如果该价格小于等于 m,就将其添加到 price_count 中,并增加该价格的计数。
  3. 查找最多的菜品数量

    • price_count 中查找最大的值,即找出出现次数最多的价格对应的菜品数量。
  4. 返回结果

    • 如果 price_count 为空,表示没有菜符合条件,返回 0。
    • 否则,返回出现次数最多的菜品数量。

时间复杂度分析

  1. 遍历菜品价格 w,时间复杂度为 O(n),其中 n 是菜品数量。
  2. unordered_map 中查找和更新操作的时间复杂度为 O(1),所以总的时间复杂度是 O(n)。

这个解法通过使用 unordered_map 统计每种菜的数量,并返回最多的那个数量,能够有效地解决问题,时间复杂度为 O(n),适用于大多数输入规模。

相关推荐
布丁写代码5 分钟前
GESP C++ 一级 2025年09月真题解析
开发语言·c++·程序人生·学习方法
iiiiii117 分钟前
【论文阅读笔记】多实例学习方法 Diverse Density(DD):在特征空间中寻找正概念的坐标
论文阅读·人工智能·笔记·机器学习·ai·学习方法·多实例学习
inputA31 分钟前
【LwIP源码学习8】netbuf源码分析
android·c语言·笔记·嵌入式硬件·学习
JM丫38 分钟前
内网理论知识总结
笔记·网络安全
前进的李工40 分钟前
LeetCode hot100:094 二叉树的中序遍历:从递归到迭代的完整指南
python·算法·leetcode·链表·二叉树
d111111111d1 小时前
STM32外设学习-I2C(细节)--学习笔记
笔记·stm32·单片机·嵌入式硬件·学习
( ˶˙⚇˙˶ )୨⚑︎1 小时前
【学习笔记】DiffFNO: Diffusion Fourier Neural Operator
笔记·神经网络·学习
ModestCoder_1 小时前
【学习笔记】Diffusion Policy for Robotics
论文阅读·人工智能·笔记·学习·机器人·强化学习·具身智能
麦麦大数据1 小时前
F049 知识图谱双算法推荐在线学习系统vue+flask+neo4j之BS架构开题论文全源码
学习·算法·知识图谱·推荐算法·开题报告·学习系统·计算机毕业设计展示
喵个咪2 小时前
Qt 优雅实现线程安全单例模式(模板化 + 自动清理)
c++·后端·qt