855. 考场就座
855. 考场就座
题目链接:855. 考场就座
代码如下:
class ExamRoom
{
public:
ExamRoom(int n) :n(n) {}
int seat()
{
if (num.size() == 0)
{
num.insert(0);
return 0;
}
int l = -1, r = 0, max = 0, insetNum = 0; //初始化左右节点,最大距离和要插入的值
if (*num.begin() != 0) { max = *num.begin(); }
for (auto it = num.begin();it != num.end();it++)
{
r = *it;
if (max < (r - l) / 2)
{
max = (r - l) / 2;
insetNum = l + (r - l) / 2;
}
l = r;
}
if (r != n - 1)
{
if (max < n - 1 - r)
{
insetNum = n - 1;
}
}
num.insert(insetNum);
return insetNum;
}
void leave(int p)
{
num.erase(p);
}
private:
std::set<int> num;
int n;
};
/**
* Your ExamRoom object will be instantiated and called as such:
* ExamRoom* obj = new ExamRoom(n);
* int param_1 = obj->seat();
* obj->leave(p);
*/