1. 程式人生 > 其它 >Leecode演算法題346之 ----資料流中的移動平均值

Leecode演算法題346之 ----資料流中的移動平均值

題目要求:

個人思路:

實現的資料結構打算用佇列,因為資料流也是一種先進先出的資料結構。最開始考慮的是判斷視窗和佇列的大小。1)如果滑動視窗小於佇列的大小,就只用計算佇列的元素之和除以元素的個數即可;

2)如果滑動視窗大於佇列的大小,就需要彈出之前的隊首的元素然後再計算。

但是關鍵點在於如何計算佇列中的所有元素之和,如果題目最開始是空的佇列,就簡單了很多,只用在每一個元素進入佇列的時候就將這個元素加入sum之中,但如果這個佇列最開始並不是為空,在計算的時候就需要將所有的元素出隊才能夠計算出這個的和,相比起來要複雜的多。

import java.util.LinkedList;
import
java.util.Queue; public class Queuetest { private Queue<Integer> queue; private int size ;//滑動視窗的size int sum = 0; public static void main(String[] args) { Queuetest queuetest = new Queuetest(3); System.out.println(queuetest.next(1)); System.out.println(queuetest.next(
3)); System.out.println(queuetest.next(2)); System.out.println(queuetest.next(4)); System.out.println(queuetest.next(6)); System.out.println(queuetest.next(2)); } public Queuetest(int size){ this.size = size; queue = new LinkedList<Integer>(); }
public double next(int val){ if(size == queue.size()) { Integer poll = queue.poll(); sum -= poll; queue.add(val); return (sum+=val)/size; } else { queue.add(val); return (sum+=val)/queue.size(); } } }