本专栏单纯记录自己刷题过程,便于后续重复刷题更新迭代自己对于同一道题的认知和方法。有好的刷题方法和思路,可以评论区交流,感谢~
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;
}
// DebugMK
if (num - pre - 1 > maxDist)
{
pos = num - 1;
}
s.insert(pos);
return pos;
}
void leave(int p) {
s.erase(p);
}
};