ACM练习——第四天
ok,今天又是三节课的一天。
刚刚吃完饭的我一刻也不敢耽误,直接开干!!!
这些题和力扣上的,为了练习数据结构的题是不一样的。
直接上嘴脸
题目
思路
先看他的输入,分别是N ,M ,K,有 N 名学生,这些学生属于 M 个班级,有 K 名学生已经冲出了学校
然后下一行输入的是这些学生的分班。
那么这道题,就是看最多有多少学生是属于同一个班级的。
在这里我们先思考一个问题,如果你留下来的学生数量是 N - K,班级人数最多的班级人数为max,那么思考,最后你输出的答案是max吗?
答:
可以是,也可以不是,因为如果N - K > max,你觉得科学吗,科学,直接输出max
但是如果N - K < max呢?是不是输出max就不合理了,毕竟现在还在学校的人数都没有max个啊,这个时候是不是就需要输出N - K 个了。
也就是说
-
该班级本来就有的学生数量(即
max
): 这是因为我们不能超过班级本来的学生数量。 -
目前还没出校的学生数量(即
N - K
): 这是因为我们不能超过还没出校的学生总数。
因此,我们要在这两个限制因素中选择较小的那个值,以确保我们不超过实际的限制。如果 max
大于 N - K
,那么最多只能选择 N - K
个学生,因为这是目前还没出校的学生的数量。如果 N - K
大于 max
,那么最多只能选择 max
个学生,因为这是班级本来的学生数量。
所以,取 std::min(
max
,
N - K
)
是为了满足这两个限制条件,确保我们得到的值是合理的。
然后就是这道题,我的思路是,可以使用一个map集合,key是班级序号,value是这个班级的人数,N - K我们一开始就知道,所以我们只需要统计每个班级的人数,最后获取到那个班级的人数最多就完美了。
最后输出最小值
C++代码示例
#include <iostream>
#include <vector>
#include <unordered_map>
using namespace std;
int main(){
// N 学生数量
int N;
// M 个班级
int M;
// K 名学生已经冲出了学校
int K;
// 给他们赋值
cin >> N >> M >> K;
// 创建一个map集合
unordered_map <int, int> map;
// 统计学生的人数
for(int i = 0; i < N; i++){
int key;
cin >> key;
map[key]++;
}
// 获取人数最多的班级
int maxNum = 0;
for(int i = 0; i < M; i++){
maxNum = max(map[i + 1], maxNum);
}
// 输出答案
cout << min(maxNum, N - K);
return 0;
}
结语
代码中我也给出了极其详细的注释,欢迎大家讨论还有没有优化的方法。
今天就这样,┏(^0^)┛
征途黯然.: OpenCV与Matplotlib的结合使用轮毂检测与目标跟踪 article is excellent and truly impressive.
旷世奇才李先生: OpenCV 与 Matplotlib 的结合使用:轮毂检测与目标跟踪,这篇文章很好,值得一读。
全栈小5: 非常不错的技术领域文章分享,解决了我在实践中的大问题!博主很有耐心,更有对知识的热忱和热爱,写了这么实用有效的分享,值得收藏点赞。支持【OpenCV 与 Matplotlib 的结合使用:轮毂检测与目标跟踪,博主这篇文章,值得一看】
豆小匠: 干货啊,这篇博客关于OpenCV与Matplotlib的结合使用在轮毂检测与目标跟踪方面的讲解非常详尽。对于OpenCV在图像处理方面的强大功能以及Matplotlib在数据可视化方面的优势进行了很好的展示。通过这篇文章,读者可以了解到如何利用这两个工具进行轮毂检测和目标跟踪,对于相关领域的研究人员和开发者来说非常实用。感谢作者的分享!
DevKevin: 干货啊,这篇博客详细介绍了OpenCV与Matplotlib的结合使用在轮毂检测与目标跟踪方面的应用。内容详实,讲解清晰,对于OpenCV在图像处理方面的强大功能以及Matplotlib在数据可视化方面的优势进行了很好的展示。对于想要深入了解计算机视觉和数据处理的朋友来说,是一篇不可多得的教程。感谢作者的分享!