1.题目
问题描述
小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
2.思路
这道题的核心思路是筛选出所有价格不超过m的菜品,然后统计每种价格出现的次数,最后找出出现次数最多的价格,并返回该价格的菜品数量。
3.代码
#include <iostream>
#include <vector>
#include <string>
#include <map>
using namespace std;
long solution(int m, const std::vector<int> w) {
// write code here
map<int, int> cnt;
for (int i = 0; i < w.size(); i++){
cnt[w[i]] += 1;
}
int result = 0;
for (auto &pair : cnt){
if (pair.first <= m){
result = max(result, pair.second);
}
}
return result;
}
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;
}