【发布时间】:2015-06-16 08:28:27
【问题描述】:
我对java(和整体编程)相当陌生,并且已经收到了从头到尾实现Sliding Window对象的任务。骨架代码如下:
import java.util.Scanner;
//implement class SlidingWindow
class Main {
// this is the test code for the judge, do not modify
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int windowSize = scanner.nextInt();
SlidingWindow window = new SlidingWindow(windowSize);
while (scanner.hasNextInt())
{
int value = scanner.nextInt();
window.Put(value);
System.out.println("[" + window.Min() + " " + window.Max() + "]");
}
scanner.close();
}
需要做什么(以及到目前为止我解决它的想法)
-
创建一个滑动窗口 w,可以用窗口大小 n 实例化:
SlidingWindow w = New SlidingWindow(n) //这是最让我难过的地方——它是一个自增长的数组吗?链表?
-
一种接受整数且没有返回值的输入法Put:
public static void Put(int value){ // 实现将依赖于SlidingWindow
返回最近输入的最小值和最大值的 Max 和 Min 方法。我将通过寻找最小值和最大值来做到这一点。
如果输入的数量超过了窗口的大小,最旧的元素应该被丢弃。
很抱歉这个问题含糊不清——我们在课堂上从来没有处理过窗户(我有几周的时间来学习任何关于编码的东西)所以我真的很难过。我在网上四处寻找一些资源,但还没有找到任何适合帮助我的东西。
如果您对如何创建 SlidingWindow w 有任何想法或建议,我认为这将使我走上正轨!
提前致谢!
【问题讨论】:
-
这个问题的起点是古老的“笔和纸”方法:可视化输入流(整数)并在它们周围绘制一个固定窗口。然后想想当你积累足够的输入时窗口是如何开始滑动的。
-
做到了,但我认为窗口被实现为 FIFO 列表是否正确?感觉自己一头雾水!
-
是的,可以使用固定大小的 FIFO 队列作为窗口。但是,有is no implementation for this in the Java API,因此您需要自己编写 FIFO 或使用 Apache Commons 或 Guava 等实用程序库。
标签: java arrays linked-list sliding-window