leetcode239. 滑动窗口最大值(java详解)

一:题目

在这里插入图片描述

二:思路

1:lc通过版


class Solution {/*思路:1.这里是要求出每一个窗口中的最大值,那么我们自然的想到如何用一个队列 可以使其每次队首出现最大值,那么我自然回想到大顶堆,但是用了之后,我们窗口中的元素位置就发生了变化那么当我们移动窗口的时候,就不能正确的 pop出窗口的首个元素。2.那么这里的话,我们就自定义一个队列,当然的话,让其满足每次pop出去的最大的元素那么其和优先队列有何区别呢?  区别就在于push()上 我们push的时候,如果发现队尾元素是比其小的话,那么我们就其pop了如果队尾元素比其大的话,我们就push进去。那么我们每次移动的时候 队首就是最大值,直接访问即可,并将其移出对列;如果队首不是最大值的话,那么我们就不用pop了,这个时候其实队列中的元素的是不满足k个的因为我们每次push的时候只是push进去 元素的相对位置 比起小的我们都pop了3.关于我们使用的这个数据结构我们也应该有所了解Deque<Intger> deque = new LinkedList<>();- 这是个双端数组- 队首的话 我们可以访问队首元素,也可以删除队首元素访问队首:deque.peek();删除队首元素:deque.poll();- 队尾的话 我们也可以访问,并且可以删除和添加访问队尾元素: deque.getLast();删除队尾元素:deque.removeLast();在队尾添加元素:deque.add(x);    */public int[] maxSlidingWindow(int[] nums, int k) {if (nums.length == 1) return nums;MyQueue queue = new MyQueue();int len = nums.length - k + 1;//代数求出int[] ans = new int[len];int index = 0;for (int i = 0; i < k; i++) {queue.add(nums[i]);}ans[index++] = queue.peek();for (int i = k; i < nums.length; i++) {//移除队列 首个元素 可能最大值就是首部元素,也可能不是queue.poll(nums[i-k]);//添加新元素queue.add(nums[i]);ans[index++] = queue.peek();}return ans;}
}class MyQueue{Deque<Integer> deque = new LinkedList<>();//poll元素的的话,当前的这个数组是否为空,还有的就是当前队首元素是否为该窗口的最大值,如果是就移除//如果不是最大值的话,那么该滑动窗口中的元素的个数是不够k个的(因为我只是记录元素的相对位置)public void poll(int val) {if (!deque.isEmpty() && deque.peek() == val) {//队首元素deque.poll();}} //在队尾添加元素//得判断队列中的尾部元素 tail 跟我们的要插入的值 insert 大小关系// tail < insert 那么的话 我们就移除队列尾部元素// tail > insert 那么的话 我们就正常添加public void add(int val) {while (!deque.isEmpty() && val > deque.getLast()) {//比队尾元素大的话deque.removeLast();}   deque.add(val);//比队尾元素小的话}//访问首部元素public int peek() {        return deque.peek();}}

2:lc超时版

class Solution {/*思路:1.这里是要求出每一个窗口中的最大值,那么我们自然的想到如何用一个队列 可以使其每次队首出现最大值。*/public int max(int[] segment,int n) {int maxx = -999999;for (int i = 0; i < n; i++) {if (maxx < segment[i]) {maxx = segment[i];}}return maxx;}public int[] maxSlidingWindow(int[] nums, int k) {int len = nums.length-k+1;//代数求解int[] ans = new int[len];int ansIndex = 0;for (int i = 0; i < len; i++) {int[] temp = new int[k];int tempIndex = 0;int count = 0;int j = i;while (count != k) {temp[tempIndex++] = nums[j++];count++;}int eachAns = max(temp,k);ans[ansIndex++] = eachAns;}return ans;}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/307408.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

程序员修神之路--它可能是分布式系统中最重要的枢纽

“灵魂拷问分布式系统为什么需要注册中心呢&#xff1f;分布式系统注册中心有哪些坑&#xff1f;分布式系统注册中心怎么来实现呢&#xff1f;注册中心利用现成的组件很好实现吗&#xff1f;看到标题你可能会鄙视一下&#xff0c;注册中心有是什么讲的。注册中心作为现在架构中…

用Java刷算法题的常用数据结构(C++转Java)

文章目录一:前言1:为何刷题从C转java2:如何上手呢&#xff1f;二:输入1:常规的输入2:关于其他输入符在nextLine()之前用吃掉回车符的问题解决3:常见输入之我们输入一串数到容器中三:常用的数据结构1:数组2.List3:Map4:Set5.栈6:队列一:前言 1:为何刷题从C转java 平时除了写项…

Magicodes.IE 2.4发布

今天我们发布了2.4版本&#xff0c;这离不开大家对Magicodes.IE的支持&#xff0c;我们也对大家的意见以及需求不断的进行更新迭代&#xff0c;目前我们的发布频率平均在一周一个beta版本&#xff0c;一个月一个正式版本的更新&#xff0c;我们欢迎更多的开发者加入进来&#x…

7-1 简单词法分析

一:题目 二:思路 思路: 1.记得看书;不要一上来就莽;不然莽不过去的 2.这里我从书中了解到 f(0,b) 0; f(0,a) 1;f(1,c)1;f(1,b)3… 那么的话我们只要最终推导出f(1,b)3;那么的话就是一个满足要求的字符串; 注意我们入口部分一定是从 0 开始; 3.接下来就是要判断一些细枝末节 …

Java 生态碎片化 和 .NET生态的一致性

.NET Core是以MIT协议开源&#xff0c; Java是GPL协议开源。Java 8 SDK升级Oracle要收费这件事对于很多小公司是有着重大的影响的&#xff0c;Java生态越发碎片化&#xff0c;有众多的OpenJDK发行版&#xff0c;腾讯云和阿里都有OpenJDK发行版&#xff0c;龙芯也有MIPS版本的Op…

Power Automate Desktop概览

点击蓝字关注我们Microsoft Power Automate使得通过自动化重复性、耗时的任务来提高您的业务效率成为可能。Power Automate提供了一种更好的方法&#xff0c;通过数字和机器人过程自动化(RPA)在整个组织中完成任务。Microsoft Ignite 在线活动小伙伴们都有参加么&#xff1f;重…

超600人!近5小时直播!录屏+彩蛋+PPT…你要的都在这!

2020年9月26日下午&#xff0c;《NCF框架揭秘》直播交流会圆满落幕&#xff01;由盛派首席架构师苏震巍老师主持、分享&#xff0c;更有各路大咖&#xff0c;在线助力&#xff0c;干货满满&#xff01;点击视频 ☝ 回顾直播现场友情提示&#xff1a;如果公众号内视频无法显示高…

leetcode226. 翻转二叉树(Java)

一&#xff1a;题目 二:上码(前序解法) /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val val; }* TreeNode(int val, TreeNode left,…

Chrome正在启用HTTP/3,支持IETF QUIC

Chromium 官方宣布 Chrome 正在部署到 HTTP/3 与 IETF QUIC。QUIC&#xff08;Quick UDP Internet Connections&#xff09;是 Google 推出的一个项目&#xff0c;旨在降低基于 TCP 通讯的 Web 延迟。QUIC 非常类似 TCPTLSSPDY &#xff0c;但是基于 UDP 实现的。它是 HTTP/3 的…

leetcode101. 对称二叉树

一:题目 二:上码 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val val; }* TreeNode(int val, TreeNode left, TreeNode right) {* …

诊断日志知多少 | DiagnosticSource 在.NET上的应用

1. 引言最近为了解决ABP集成CAP时无法通过拦截器启用工作单元的问题&#xff0c;从小伙伴那里学了一招。借助DiagnossticSource&#xff0c;可以最小改动完成需求。关于DiagnosticSource晓东大佬18年在文章 在 .NET Core 中使用 Diagnostics (Diagnostic Source) 记录跟踪信息就…

leetcode110. 平衡二叉树(java详解)

一:题目 二:上码 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val val; }* TreeNode(int val, TreeNode left, TreeNode right) {* …

IdentityServer4系列 | 常见术语说明

一、前言在上一篇中&#xff0c;我们IdentityServer4的说明&#xff0c;认识到是一个基于OpenID Connect协议标准的身份认证和授权程序&#xff0c;并简单的对基础知识的认识以及区别说明&#xff0c;从OAuth、OpenID、OpenID Connect以及JWT等进行对比区别说明。而在这一篇中&…

网易年薪40W架构师面试题,欢迎自测!

一个月前被拉进了一个微信群&#xff0c;名字叫《明日都是大佬》&#xff0c;群里有20多个人&#xff0c;都是正在跳槽的&#xff0c;目标是年薪30w&#xff01;投简历、笔试、面试后都相互分享&#xff0c;互通有无你懂的。拉我进群是帮忙解答一些难题&#xff0c;很多题目还是…

leetcode257. 二叉树的所有路径(java递归详解)

一:题目 二:上码 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val val; }* TreeNode(int val, TreeNode left, TreeNode right) {* …

leetcode617. 合并二叉树

一:题目 二:上码 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val val; }* TreeNode(int val, TreeNode left, TreeNode right) {* …

跟我一起学.NetCore之熟悉的接口权限验证不能少(Jwt)

前言权限管控对于一个系统来说是非常重要的&#xff0c;最熟悉不过的是菜单权限和数据权限&#xff0c;上一节通过Jwt实现了认证&#xff0c;接下来用它实现接口权限的验证&#xff0c;为什么不是菜单权限呢&#xff1f;对于前后端分离而言&#xff0c;称其为接口权限感觉比较符…

.NET 云原生架构师训练营(模块一 架构师与云原生)--学习笔记

目录什么是软件架构软件架构的基本思路单体向分布式演进、云原生、技术中台1.1 什么是软件架构1.1.1 什么是架构&#xff1f;Software architecture {Elements, Forms, Rationale/Constraints}元素、形式/模式、基本原理和限制为什么需要软件架构&#xff1f;软件架构的终极目…

leetcode530. 二叉搜索树的最小绝对差

一:题目 二:上码 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val val; }* TreeNode(int val, TreeNode left, TreeNode right) {* …

再分享 5 个 vs 调试技巧

前言 之前在《5 个非常实用的 vs 调试技巧》和《继续分享 5 个实用的 vs 调试技巧》中分享了 10 个我认为非常值得了解的 vs 调试技巧&#xff0c;本周继续分享 5 个很实用的调试技巧。1. 显示下一条语句 在调试时&#xff0c;遇到断点中断后&#xff0c;为了更加清楚的了解程…