本文主要是介绍LeetCode之855_考场就座,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
本专栏单纯记录自己刷题过程,便于后续重复刷题更新迭代自己对于同一道题的认知和方法。有好的刷题方法和思路,可以评论区交流,感谢~
1.但凡遇到在动态过程中取最值得要求,肯定要使用有序数据结构,常用的数据结构就是二叉堆和平衡二叉搜索树了。
set<int> s;
s.empty()
s.insert(0);
s.erase(p);
集合(set)。每个元素的值必须唯一;而且系统会根据该值来自动将数据排序;内部结构采用红黑树的平衡二叉树。
class ExamRoom {int num;set<int> s;public:ExamRoom(int n) {num = n;}int seat() {if (s.empty()){s.insert(0);return 0;}int pos = 0, pre = -1, maxDist = 0;for (int cur : s){int dist = (cur - pre) / 2;if (dist > maxDist){pos = (pre == -1 ? 0 : pre + dist);maxDist = dist;}pre = cur;}// DebugMKif (num - pre - 1 > maxDist){pos = num - 1;}s.insert(pos);return pos;}void leave(int p) {s.erase(p);}
};
这篇关于LeetCode之855_考场就座的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!