这个专栏 我将分享每日做的算法题的解题思路 秋招加油!
这是第十四天 !!
041 滑动窗口的平均值
题目
AC代码
class MovingAverage {
int size;
int length;
Queue<Integer> queue;
int sum = 0;
/** Initialize your data structure here. */
public MovingAverage(int size) {
this.size = size;
this.length = 0;
this.sum = 0;
this.queue = new ArrayDeque<>();
}
public double next(int val) {
queue.add(val);
sum += val;
length++;
if(length > size){
sum -= queue.poll();
length--;
}
return sum*1.0/length;
}
}
添加元素后判断一下是否超出了窗口大小,如果超出了就移除队列第一个元素,最后计算品均值即可。
042 最近请求次数
题目
AC代码
class RecentCounter {
Queue<Integer> queue;
public RecentCounter() {
queue = new ArrayDeque<>();
}
public int ping(int t) {
queue.offer(t);
while(queue.peek()<t-3000){
queue.poll();
}
return queue.size();
}
}
队列实现即可
043 往完全二叉树添加节点
题目
AC代码
class CBTInserter {
TreeNode root;
public CBTInserter(TreeNode root) {
this.root = root;
}
//如果当前结点的左结点为空或者右结点为空,就将新结点接上,并返回当前结点的值
//否则将当前结点的左右结点依次入队列,继续while循环
public int insert(int v) {
Queue<TreeNode> queue = new LinkedList<TreeNode>();
TreeNode newNode = new TreeNode(v);
queue.add(root);
while(!queue.isEmpty()){
TreeNode node = queue.poll();
if(node.left == null){
node.left = newNode;
}else if(node.right == null){
node.right = newNode;
}else{
queue.add(node.left);
queue.add(node.right);
continue;
}
return node.val;
}
return -1;
}
public TreeNode get_root() {
return root;
}
}
胜利贵在坚持,要取得胜利就要坚持不懈地努力,饱尝了许多次的失败之后才能成功,即所谓的失败乃成功之母,成功也就是胜利的标志,也可以这样说,坚持就是胜利。