41)滑动窗口的平均值
class MovingAverage {
private:
queue<int> q;
int win;
double sum = 0;
public:
/** Initialize your data structure here. */
MovingAverage(int size) {
win = size;
}
double next(int val) {
q.push(val);
sum += val;
if(q.size()>win){
int del = q.front();
sum -= del;
q.pop();
}
return sum/q.size();
}
};
42)最近请求次数
class RecentCounter {
private:
int win = 3000;
queue<int> q;
public:
RecentCounter() {
}
int ping(int t) {
q.push(t);
int first = t-win;
while(q.front()<first){
q.pop();
}
return q.size();
}
};
43)往完全二叉树添加节点
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
* };
*/
class CBTInserter {
private:
TreeNode* root;
queue<TreeNode*> q;
public:
CBTInserter(TreeNode* root) {
this->root = root;
q.push(root);
while(q.front()->left!=nullptr && q.front()->right!=nullptr){
auto temp = q.front();
q.push(temp->left);
q.push(temp->right);
q.pop();
}
}
int insert(int v) {
TreeNode* parent = q.front();
TreeNode* node = new TreeNode(v);
if(parent->left == nullptr){
parent->left = node;
}else{
parent->right = node;
q.pop();
q.push(parent->left);
q.push(parent->right);
}
return parent->val;
}
TreeNode* get_root() {
return root;
}
};
/**
* Your CBTInserter object will be instantiated and called as such:
* CBTInserter* obj = new CBTInserter(root);
* int param_1 = obj->insert(v);
* TreeNode* param_2 = obj->get_root();
*/