题目描述
小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
数据结构选择
- 过滤价格:我们需要过滤掉所有价格超过
m的菜品。可以使用一个数组来存储过滤后的价格。 - 统计数量:为了统计每个价格的菜品数量,我们可以使用一个哈希表(
unordered_map),其中键是价格,值是该价格的菜品数量。 - 找出最大值:我们需要遍历哈希表,找出数量最多的那个价格对应的菜品数量。
算法步骤
-
过滤价格:
- 遍历输入的菜品价格数组
w。 - 对于每个价格
price,如果price <= m,则将其加入到一个新的数组filtered中。
- 遍历输入的菜品价格数组
-
统计数量:
- 遍历
filtered数组。 - 使用一个
unordered_map<int, int>来统计每个价格的菜品数量。对于每个价格price,将其对应的值加一。
- 遍历
-
找出最大值:
- 遍历
unordered_map,找出值最大的那个键值对。 - 记录最大值
maxCount,并返回该值。
- 遍历
详细步骤分析
-
过滤价格:
- 这一步的目的是去除所有价格超过
m的菜品,因为小C不会点这些菜。 - 通过遍历
w数组,我们可以快速过滤出符合条件的菜品价格。 - 使用一个数组
filtered来存储过滤后的价格,这样可以方便后续的统计操作。
- 这一步的目的是去除所有价格超过
-
统计数量:
- 这一步的目的是统计每个价格的菜品数量。
- 使用
unordered_map可以高效地进行统计,因为哈希表的查找和插入操作的时间复杂度都是 O(1)。 - 对于每个价格
price,我们将其对应的值加一,表示该价格的菜品数量增加了一个。
-
找出最大值:
- 这一步的目的是找出数量最多的那个价格对应的菜品数量。
- 遍历
unordered_map,我们可以找到值最大的那个键值对。 - 使用一个变量
maxCount来记录最大的菜品数量,并在遍历过程中不断更新。
解题代码
#include <iostream>
#include <vector>
#include <unordered_map>
#include <algorithm>
using namespace std;
long solution(int m, const std::vector<int> w) {
// Step 1: Filter prices
std::vector<int> filtered;
for (int price : w) {
if (price <= m) {
filtered.push_back(price);
}
}
// Step 2: Count occurrences of each price
std::unordered_map<int, int> priceCount;
for (int price : filtered) {
priceCount[price]++;
}
// Step 3: Find the maximum count
int maxCount = 0;
for (const auto& pair : priceCount) {
if (pair.second > maxCount) {
maxCount = pair.second;
}
}
return maxCount;
}
int main() {
std::cout << (solution(6, {2, 3, 3, 6, 6, 6, 9, 9, 23}) == 3) << std::endl;
std::cout << (solution(4, {1, 2, 4, 4, 4}) == 3) << std::endl;
std::cout << (solution(5, {5, 5, 5, 5, 6, 7, 8}) == 4) << std::endl;
return 0;
}
题目总结
通过以上步骤,我们可以有效地解决这个问题。首先过滤掉不符合条件的菜品价格,然后统计每个价格的菜品数量,最后找出数量最多的那个价格对应的菜品数量。这个算法的时间复杂度为 O(n),其中 n 是菜品数量,因为我们需要遍历菜品价格数组两次(一次过滤,一次统计),并且遍历哈希表一次。空间复杂度为 O(n),因为我们使用了两个额外的数据结构(filtered 数组和 unordered_map)