首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >实现滑动窗口(java)

实现滑动窗口(java)
EN

Stack Overflow用户
提问于 2015-04-10 14:50:32
回答 2查看 13.9K关注 0票数 2

我对java (和总体编程)相当陌生,并且从头到尾都收到了实现滑动窗口对象的任务。基本代码如下:

代码语言:javascript
复制
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: 公共静态void (int值){ //实现将依赖于SlidingWindow
  • 返回最近输入的最小和最大值的Max和Min方法。这是我要做的,通过寻找最小和最大。
  • 如果输入的数量超过窗口的大小,则应丢弃最老的元素。

很抱歉,这个问题含糊不清--我们从来没有在课堂上讨论过windows (我在几个星期后就学会了任何关于编码的知识),所以我真的很困惑。我已经在网上寻找了一些资源,但还没有找到合适的帮助我的东西。

如果您对如何创建SlidingWindow w有任何想法或建议,我认为这将使我走上正确的轨道!

提前感谢!

EN

回答 2

Stack Overflow用户

发布于 2015-04-10 14:57:52

对于滑动窗口,最简单的可能是插入次数的计数器。如下所示:

代码语言:javascript
复制
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++;
    }
}

这样,您就可以使用固定大小的数组,并在填充数组后立即用更新的值替换最旧的值,而无需转移内容。

票数 10
EN

Stack Overflow用户

发布于 2016-02-17 15:26:12

我在此提供一个简单而相对简单的解决方案。我给出了两个java文件的代码。

全班:

代码语言:javascript
复制
    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;
            }
        }   
    }

主要方法:

代码语言:javascript
复制
    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

我只剩下检查窗口的长度不应该大于数组。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29564490

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档