JZ64-滑动窗口的最大值

滑动窗口的最大值

https://www.nowcoder.com/practice/1624bc35a45c42c0bc17d17fa0cba788?tpId=13&tags=&title=&diffculty=0&judgeStatus=0&rp=1&tab=answerKey

class Solution {
    public ArrayList<Integer> maxInWindows(int[] num, int size) {
        ArrayList<Integer> list = new ArrayList<>();
        if (num == null || num.length == 0 || size == 0) {
            return list;
        }
        for (int i = 0; i < num.length - size + 1; i++) {
            list.add(findMax(num, i, size));
        }
        return list;
    }

    private int findMax(int[] num, int start, int size) {
        int max = num[start];
        for (int i = 1; i < size; i++) {
            if (num[start + i] > max) {
                max = num[start + i];
            }
        }
        return max;
    }
}

class Solution2 {
    public ArrayList<Integer> maxSlidingWindow(int[] nums, int size) {
        ArrayList<Integer> ret = new ArrayList<>();
        if (nums == null || size < 1 || nums.length < size) {
            return ret;
        }

        LinkedList<Integer> queue = new LinkedList<>();

        for (int i = 0; i < nums.length; i++) {
            // 在队列不为空的情况下,如果队列尾部的元素要比当前的元素小,或等于当前的元素
            // 那么为了维持从大到小的原则,我必须让尾部元素弹出
            while (!queue.isEmpty() && nums[queue.peekLast()] <= nums[i]) {
                queue.pollLast();
            }
            // 不走 while 的话,说明我们正常在队列尾部添加元素
            queue.addLast(i);
            // 如果滑动窗口已经略过了队列中头部的元素,则将头部元素弹出
            if (queue.peekFirst() == (i - size)) {
                queue.pollFirst();
            }
            // 看看窗口有没有形成,只有形成了大小为 size 的窗口,我才能收集窗口内的最大值
            if (i >= (size - 1)) {
                ret.add(nums[queue.peekFirst()]);
            }
        }
        return ret;
    }
}

全部评论

相关推荐

我穷极一生追求大厂,最后发现,真正的伯乐在一个我一开始都看不上的地方。发来的offer是老板亲手写的2000多字的邮箱从大二就开始积攒的两段我自认为还不错的实习履历,一段小厂一段高知名度公司,但找暑期实习三个多月以来,体重一路暴跌,身体被搞坏了,面试了那么多家公司,只有他,让我得到了心灵上最大的慰藉。找实习过程中对不起自己的身体,更对不起妈妈深圳,一家很小的初创团队,但心高气傲想去大厂的我还是抱着聊聊天的心态还是去面试了面试官是个海归硕士,大厂出身创业,做跨境电商的。他一上来就说:“你的简历我仔细看过了,我知道你的闪光点在哪里。所以我不问你八股文,也不问你过没过六级,这些你的简历里都告诉我了。”我愣住了。这是我面试那么多次,第一次听到面试官说“我知道你很厉害”。在大厂面试的时候,我经历最多的是什么?是面试官看着我的简历,一脸茫然。因为我走的方向,小众孤独,大厂招聘几乎不面向实习生。我娓娓道来地阐述项目的核心亮点,却直接摆摆手让我写题。我的“屠龙刀”,在他们那里,找不到龙。但是他懂的多,懂我这个方向在国内有多小众、多孤独。他说,他也是这么过来的。我从小到大都被灌输“优绩主义”。考高分、上好大学、进大厂做自己喜欢的东西,这才是成功。我以为,只要我够强,大厂就会要我。可现实是,面对心仪的岗位,大厂的面试官看不懂我。字节、腾讯、百度、懂车帝、Momenta……能叫上名字的大厂,只面过10%,几乎全倒在终面,剩下的全简历挂。我一度怀疑自己:是不是我真的很差?我后来没有去那家小公司,去了北京某独角兽。但那次面试,我记了很久。因为那是第一次,有一个面试官对我说:“我知道你很厉害。”不是因为大厂实习,不是因为985,不是因为会背八股文。只是因为,他看懂了我的简历。我穷极一生追求大厂,最后发现:我追求的从来不是“大厂”这两个字。我追求的是被看见、被认可、被理解。而这些东西,大厂给不了我的,一个小公司的面试官,用一句话就给了。如果你现在也在低谷里,投了几千份简历都没有回音,比如我,几个小号轮流切换投,快四千份,亦或是心仪的岗位面试被挂了又挂……在就业环境极其恶劣的时代,我想说:不是你不够好,而是懂你的人还没来别着急会来的
牛牛爱吃草草:看了半天很感动,到最后给我说:我后来没有去那家小公司。
我的求职进度条
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务