我对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();
}
需要做些什么(以及我迄今为止解决它的想法)
创建一个可以使用窗口大小n实例化的滑动窗口w:
SlidingWindow w = New SlidingWindow(n)//这是最让我感到烦恼的是 - 它是一个自我增长的阵列吗?链表?
输入方法Put接受整数并且没有返回值:
public static void Put(int value){//实现将取决于SlidingWindow
最大和最小方法,用于返回最近输入的最小值和最大值。我将通过寻找最小值和最大值来做到这一点。
如果输入的数量超过窗口的大小,则应丢弃最旧的元素。
对不起这个问题的模糊性 - 我们从来没有在课堂上处理过窗口问题(我在学习编码方面需要几周时间),所以我真的很难过。我在网上浏览了一些资源,但还没有找到适合帮助我的东西。
如果您对如何创建SlidingWindow w有任何想法或建议,我认为这将使我走上正轨!
提前致谢!
答案 0 :(得分:10)
对于滑动窗口,最简单的可能是插入数量的计数器。像这样:
class Window{
int ct = 0;
int[] storage;
public Window(int size){
storage = new int[size];
}
public void put(int i){
storage[ct % storage.length] = i;
ct++;
}
}
这样,您可以使用固定大小的数组,并在数组填充后立即用较新的值替换最旧的数据,而不会移动内容。
答案 1 :(得分:0)
我特此提供一个简单而相对简单的解决方案。我正在给两个java文件的代码。
班级:
public class Window {
public void getValue(int[] a, int w){
int t = 0;
for(int i=0;i<a.length;i++){
if(i==a.length-w+1){
break;
}else{
for(int j=i;j<i+w;j++){
if(t<a[j]){
t = a[j];
}
}
}
System.out.println(t);
t = 0;
}
}
}
主要方法:
public class MainMethod {
public static void main(String[] args) {
int[] a = new int[]{1, 3, -1, -3, 5, 3, 6, 7};
int w = 3;
Window ob = new Window();
ob.getValue(a, w);
}
}
Answer: 3 3 5 5 6 7
我只留下检查窗口的长度不应该大于数组。