博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
G面经prepare: Data Stream Average
阅读量:5061 次
发布时间:2019-06-12

本文共 2694 字,大约阅读时间需要 8 分钟。

给一个datastream和一个fixed window size, 让我design一个class可以完成add number还有find average in the window. 就是不能用vector得用array.

当然用queue是最好的

package DataStreamAverage;import java.util.*;public class Solution {    int count;    int sum;    Queue
q; public Solution() { this.count = 0; this.sum = 0; this.q = new LinkedList
(); } public ArrayList
average (HashSet
set, int L) { ArrayList
result = new ArrayList
(); Iterator
iter = set.iterator(); while (iter.hasNext()) { int cur = iter.next(); q.offer(cur); count++; sum += cur; if (q.size()>L) { int front = q.peek(); sum -= front; count--; q.poll(); } double aver = (double)sum/count; result.add(aver); } return result; } /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub HashSet
set = new HashSet
(); for (int i=1; i<=10; i++) { set.add(i); } Solution sol = new Solution(); ArrayList
res = sol.average(set, 2); System.out.println(res); }}

当然用fixed size array也可以,但是要小心,一个是要折回,二个是要删除数组元素之前存在的数

1 package DataStreamAverage; 2  3 import java.util.*; 4  5 public class Solution2 { 6     int count; 7     int sum; 8     int[] arr; 9     int pos;10     11     public Solution2(int size) {12         this.count = 0;13         this.sum = 0;14         this.arr = new int[size];15         Arrays.fill(arr, Integer.MIN_VALUE);16         this.pos = 0;17     }18     19     20     public ArrayList
average (HashSet
set, int L) {21 ArrayList
result = new ArrayList
();22 Iterator
iter = set.iterator();23 while (iter.hasNext()) {24 int cur = iter.next();25 if (pos == arr.length) {26 pos = 0;27 }28 if (arr[pos] != Integer.MIN_VALUE) {29 sum -= arr[pos];30 count--;31 }32 arr[pos] = cur;33 sum += arr[pos];34 pos++;35 count++;36 double aver = (double)sum/count;37 result.add(aver);38 }39 return result;40 }41 42 43 /**44 * @param args45 */46 public static void main(String[] args) {47 // TODO Auto-generated method stub48 HashSet
set = new HashSet
();49 for (int i=1; i<=10; i++) {50 set.add(i);51 }52 Solution2 sol = new Solution2(2);53 ArrayList
res = sol.average(set, 2);54 System.out.println(res);55 }56 57 }

 

转载于:https://www.cnblogs.com/EdwardLiu/p/5143909.html

你可能感兴趣的文章
IOS开发UI篇--UITableView的自定义布局==xib布局
查看>>
【深度学习】caffe 中的一些参数介绍
查看>>
Python-Web框架的本质
查看>>
Unrecognized Windows Sockets error: 0: JVM_Bind 异常解决办法
查看>>
struts2中<s:form>的应用
查看>>
QML学习笔记之一
查看>>
7NiuYun云存储UploadPicture
查看>>
Window 的引导过程
查看>>
python与 Ajax跨域请求
查看>>
Java实体书写规范
查看>>
App右上角数字
查看>>
从.NET中委托写法的演变谈开去(上):委托与匿名方法
查看>>
六、PowerDesigner 正向工程 和 逆向工程 说明
查看>>
小算法
查看>>
201521123024 《java程序设计》 第12周学习总结
查看>>
贪吃蛇游戏改进
查看>>
新作《ASP.NET MVC 5框架揭秘》正式出版
查看>>
“前.NET Core时代”如何实现跨平台代码重用 ——源文件重用
查看>>
【POJ1845】Sumdiv(数论/约数和定理/等比数列二分求和)
查看>>
在WPF中使用Caliburn.Micro搭建MEF插件化开发框架
查看>>