当前位置: 首页 > news >正文

力扣哈哈哈哈

public class MyStack {int top;Queue<Integer> q1;Queue<Integer> q2;public MyStack() {q1=new LinkedList<Integer>();q2=new LinkedList<Integer>();}public void push(int x) {q2.offer(x);//offer是入队方法while (!q1.isEmpty()){q2.offer(q1.poll());//poll是出队方法}Queue<Integer> temp;temp=q1;q1=q2;q2=temp;}public int pop() {return q1.poll();}public int top() {return q1.peek();//peek用于检索但不移除队列的头部元素}public boolean empty() {return q1.isEmpty();}
}

public class MyQueue {Deque<Integer> inStack;Deque<Integer> outStack;public MyQueue() {inStack=new ArrayDeque<Integer>();outStack=new ArrayDeque<Integer>();}public void push(int x) {inStack.push(x);}public int pop() {if(outStack.isEmpty()){intooutStack();}return outStack.pop();}public int peek() {if(outStack.isEmpty()){intooutStack();}return outStack.peek();}public boolean empty() {return inStack.isEmpty()&&outStack.isEmpty();}private void intooutStack(){while (!inStack.isEmpty()){outStack.push(inStack.pop());}}
}/*** Your MyQueue object will be instantiated and called as such:* MyQueue obj = new MyQueue();* obj.push(x);* int param_2 = obj.pop();* int param_3 = obj.peek();* boolean param_4 = obj.empty();*/

构造函数 MyQueue(): 初始化了两个栈 inStack 和 outStack,分别用于入队和出队操作。

push(int x) 方法: 将元素 x 入队。直接将元素 x 压入 inStack 栈顶。

pop() 方法: 出队操作,返回队列的头部元素并将其移除。首先检查 outStack 是否为空,如果为空,则调用 intooutStack() 方法将 inStack 中的元素逐个弹出并压入 outStack,然后从 outStack 中弹出一个元素作为出队元素。

peek() 方法: 返回队列的头部元素,但不移除。同样,首先检查 outStack 是否为空,如果为空,则调用 intooutStack() 方法将 inStack 中的元素逐个弹出并压入 outStack,然后返回 outStack 栈顶元素。

empty() 方法: 检查队列是否为空。如果 inStack 和 outStack 都为空,则队列为空。

intooutStack() 方法: 将 inStack 中的元素逐个弹出并压入 outStack。这个方法在执行出队操作时会被调用,确保 outStack 中的元素顺序符合队列的先进先出特性。

class Solution {public int[] maxSlidingWindow(int[] nums, int k) {int n = nums.length;PriorityQueue<int[]> pq = new PriorityQueue<int[]>(new Comparator<int[]>() {public int compare(int[] pair1, int[] pair2) {return pair1[0] != pair2[0] ? pair2[0] - pair1[0] : pair2[1] - pair1[1];}});for (int i = 0; i < k; ++i) {pq.offer(new int[]{nums[i], i});}int[] ans = new int[n - k + 1];ans[0] = pq.peek()[0];for (int i = k; i < n; ++i) {pq.offer(new int[]{nums[i], i});while (pq.peek()[1] <= i - k) {pq.poll();}ans[i - k + 1] = pq.peek()[0];}return ans;}
}

PriorityQueue<int[]> pq = new PriorityQueue<int[]>(new Comparator<int[]>() {
            public int compare(int[] pair1, int[] pair2) {
                return pair1[0] != pair2[0] ? pair2[0] - pair1[0] : pair2[1] - pair1[1];
            }
        });

这段代码创建了一个优先队列 pq,其中存储了整数数组 int[]。在构造优先队列时,通过传入一个自定义的比较器 Comparator<int[]> 来指定元素的比较规则。

比较器中的 compare() 方法定义了元素的比较逻辑。在这个比较器中,首先比较两个元素的第一个元素 pair1[0] 和 pair2[0],如果它们不相等,则按照元素的第一个值从大到小排序,即返回 pair2[0] - pair1[0]。如果第一个元素相等,则继续比较第二个元素 pair1[1] 和 pair2[1],按照第二个元素从大到小排序,即返回 pair2[1] - pair1[1]。

这样定义的比较器保证了优先队列中的元素按照其第一个值从大到小排序,如果第一个值相等,则按照第二个值从大到小排序。这种排序方式可以确保优先队列中的头部元素始终是具有最大值的元素对 [nums[i], i]。

pq.offer(new int[]{nums[i], i});
ChatGPT
在这行代码中,pq.offer(new int[]{nums[i], i}),我们创建了一个整数数组 new int[]{nums[i], i},其中 nums[i] 是当前元素的值,i 是当前元素的索引。然后,我们使用 pq.offer() 方法将这个数组作为一个元素添加到优先队列 pq 中。

这样,每个元素都以 [nums[i], i] 的形式存储在优先队列中,从而实现了按照元素值及其对应的索引进行排序。

对于这行代码 pq.peek()[1] <= i - k,它是在检查当前优先队列头部元素的索引是否小于等于 i - k,如果是,则表示该元素不在当前窗口内。让我来解释一下这行代码的作用:

  • pq.peek():这会返回优先队列 pq 的头部元素,即具有最高优先级的元素,由于我们在构造优先队列时使用了自定义的比较器,头部元素是具有最大值的元素对 [nums[i], i]
  • pq.peek()[1]:这会返回头部元素的索引部分,即 i,这是因为我们将元素对 [nums[i], i] 存入优先队列中,第二个值是元素的索引。
  • i - k:这表示当前窗口的左边界,即当前索引 i 减去窗口的大小 k,这是为了确定当前窗口的范围。

所以,pq.peek()[1] <= i - k 的意思是,如果当前优先队列头部元素的索引小于等于当前窗口的左边界,即头部元素不在当前窗口内,那么我们需要将该元素从队列中弹出。

PriorityQueue 是 Java 中提供的一种优先队列的实现,它是一种特殊的队列,其中的元素被赋予了优先级。在 PriorityQueue 中,元素按照它们的自然顺序或者根据特定的 Comparator 接口进行排序。

  • 当不提供自定义的比较器时,PriorityQueue 将使用元素的自然顺序进行排序。例如,如果队列存储的是整数,则队列将按照整数的大小进行排序,从小到大排列。
  • 当提供了自定义的比较器时,PriorityQueue 将根据指定的比较规则对元素进行排序。

在这段代码中,我们使用了一个自定义的比较器,通过比较元素对 [nums[i], i] 中的第一个值(元素值)来进行排序。如果元素值不相等,则按照元素值从大到小排序;如果元素值相等,则按照第二个值(元素索引)从大到小排序。这样,优先队列中的头部元素始终是具有最大值的元素对 [nums[i], i],从而实现了按照元素值及其对应的索引进行排序。

这段代码是标准的解法,它使用优先队列来解决滑动窗口最大值的问题。让我来逐步解释它的实现:

  1. 初始化

    • 创建了一个优先队列 pq,用于存储当前窗口内的元素,并按照元素值从大到小排序,如果元素值相等,则按照索引从大到小排序。
    • 使用一个循环遍历数组 nums 的前 k 个元素,将它们作为初始窗口,并加入优先队列 pq 中。
  2. 计算窗口最大值

    • 初始化一个长度为 n - k + 1 的数组 ans,用于存储每个窗口的最大值。
    • 将第一个窗口的最大值(即优先队列的头部元素的值)存入 ans 数组的第一个位置。
    • 从第 k 个元素开始遍历数组 nums,并将每个元素加入到优先队列 pq 中。
    • 对于每个窗口:
      • 如果当前优先队列头部元素的索引小于等于 i - k,表示该元素不在当前窗口内,需要将其从队列中弹出。
      • 将当前窗口的最大值存入 ans 数组中。
  3. 返回结果

    • 返回 ans 数组,其中存储了每个窗口的最大值。

这种实现方式利用了优先队列的特性,实现了对滑动窗口内的元素进行快速查找最大值的功能。

相关文章:

力扣哈哈哈哈

public class MyStack {int top;Queue<Integer> q1;Queue<Integer> q2;public MyStack() {q1new LinkedList<Integer>();q2new LinkedList<Integer>();}public void push(int x) {q2.offer(x);//offer是入队方法while (!q1.isEmpty()){q2.offer(q1.pol…...

RUM 最佳实践-视觉稳定性的探索与实践

写在前面的话 在当今数字时代&#xff0c;网页的视觉稳定性对于提供良好的用户体验至关重要。其中一个衡量视觉稳定性的关键指标就是累积布局偏移&#xff08;Cumulative Layout Shift&#xff0c;简称 CLS&#xff09;。CLS 作为 Web Vitals 指标之一&#xff0c;它衡量的是网…...

PostgreSQL的学习心得和知识总结(一百三十八)|深入理解PostgreSQL数据库之Protocol message构造和解析逻辑

目录结构 注&#xff1a;提前言明 本文借鉴了以下博主、书籍或网站的内容&#xff0c;其列表如下&#xff1a; 1、参考书籍&#xff1a;《PostgreSQL数据库内核分析》 2、参考书籍&#xff1a;《数据库事务处理的艺术&#xff1a;事务管理与并发控制》 3、PostgreSQL数据库仓库…...

爬虫开发教程

一、爬虫概述 爬虫&#xff08;也称为网络爬虫或蜘蛛&#xff09;是一种自动化程序&#xff0c;能够模拟人类在互联网上浏览和抓取数据的行为。它通过发送HTTP请求&#xff0c;获取网页的HTML代码&#xff0c;然后解析这些代码以提取有用的数据。爬虫在数据分析、价格监测、竞…...

【Python】高级进阶(专版提升3)

Python 1 程序结构1.1 模块 Module1.1.1 定义1.1.2 作用1.1.3 导入1.1.3.1 import1.1.3.2 from import 1.1.4 模块变量1.1.5 加载过程1.1.6 分类 1.2 包package1.2.1 定义1.2.2 作用1.2.3 导入1.1.3.1 import1.1.3.2 from import 2 异常处理Error2.1 异常2.2 处理 3 迭代3.1 可…...

LeetCode 1378、1277、2944

1378 二级排序&#xff0c;compare函数必须是static的 class Solution { public:struct node {int val;int priority;};static bool compare(const node &n1, const node &n2) {if (n1.priority n2.priority) {return n1.val < n2.val;}return n1.priority < n…...

【缓存常见问题】

在使用缓存时特别是在高并发场景下会遇到很多问题&#xff0c;常用的问题有缓存穿透、缓存击穿、缓存雪崩以及缓存一致性问题。 1、缓存穿透 首先&#xff0c;什么是缓存穿透呢&#xff1f; 缓存穿透是指请求一个不存在的数据&#xff0c;缓存层和数据库层都没有这个数据&…...

Python爬取猫眼电影票房 + 数据可视化

目录 主角查看与分析 爬取可视化分析猫眼电影上座率前10分析猫眼电影票房场均人次前10分析猫眼电影票票房占比分析 主角查看与分析 爬取 对猫眼电影票房进行爬取&#xff0c;首先我们打开猫眼 接着我们想要进行数据抓包&#xff0c;就要看网站的具体内容&#xff0c;通过按F12…...

Spring Boot深度解析:是什么、为何使用及其优势所在

在Java企业级应用开发的漫长历史中&#xff0c;Spring框架以其卓越的依赖注入和面向切面编程的能力&#xff0c;赢得了广大开发者的青睐。然而&#xff0c;随着技术的不断进步和项目的日益复杂&#xff0c;传统的Spring应用开发流程逐渐显得繁琐和低效。为了解决这一问题&#…...

面向对象——类与对象

文章目录 类与对象构造函数、析构函数get/set方法函数&#xff1a;类内声明、类外定义static 类与对象 #include<iostream> #include<string> using namespace std; /* 类与对象 */ class Person{public:string name;// 固有属性&#xff0c;成员变量 int age;pu…...

Golang的[]interface{}为什么不能接收[]int?

在 Go 中&#xff0c;[]interface{} 和 []int 是两种不同的类型&#xff0c;虽然它们的底层数据结构都是切片&#xff0c;但是它们的元素类型不同。[]interface{} 是一个空接口切片&#xff0c;可以容纳任意类型的元素&#xff0c;而 []int 是一个整数切片&#xff0c;只能容纳…...

重启服务器或重启docker,导致emqx的Dashboard的密码重置为public

最近在项目中突然发现重启服务器,或者重启docker 修改好的emqx的Dashboard的密码重置为public 技术博客 http://idea.coderyj.com/ 1.解决办法就是固定 emqx的节点 # 拉取镜像 docker pull emqx/emqx# 创建目录&#xff0c;进行目录挂载 mkdir -p /docker/emqx/{etc,lib,data,…...

就业班 第三阶段(ansible) 2401--4.16 day2 ansible2 剧本+角色

六、Ansible playbook 简介 playbook 是 ansible 用于配置&#xff0c;部署&#xff0c;和管理被控节点的剧本。   通过 playbook 的详细描述&#xff0c;执行其中的一系列 tasks &#xff0c;可以让远端主机达到预期的状态。playbook 就像 Ansible 控制器给被控节点列出的的…...

常用的过滤网站扫描网站攻击的路径是那些,比如:/etc/passwd等

网站攻击中经常被尝试的路径主要包括利用漏洞获取敏感文件、执行系统命令或者注入恶意代码的尝试。以下是一些常见的被攻击者尝试访问的路径和文件&#xff0c;这些通常在网络入侵检测系统&#xff08;IDS&#xff09;和网络防火墙的过滤规则中被特别关注&#xff1a; 系统文件…...

考研数学|《1800》《660》《880》如何选择和搭配?(附资料分享)

直接说结论&#xff1a;基础不好先做1800、强化之前660&#xff0c;强化可选880/1000题。 首先&#xff0c;传统习题册存在的一个问题是题量较大&#xff0c;但难度波动较大。《汤家凤1800》和《张宇1000》题量庞大&#xff0c;但有些题目难度不够平衡&#xff0c;有些过于简单…...

论文笔记:Are Human-generated Demonstrations Necessary for In-context Learning?

iclr 2024 reviewer 评分 6668 1 intro 大型语言模型&#xff08;LLMs&#xff09;已显示出在上下文中学习的能力 给定几个带注释的示例作为演示&#xff0c;LLMs 能够为新的测试输入生成输出然而&#xff0c;现行的上下文学习&#xff08;ICL&#xff09;范式仍存在以下明显…...

C语言 | Leetcode C语言题解之第28题找出字符串中第一个匹配项的下标

题目&#xff1a; 题解&#xff1a; int strStr(char* haystack, char* needle) {int n strlen(haystack), m strlen(needle);if (m 0) {return 0;}int pi[m];pi[0] 0;for (int i 1, j 0; i < m; i) {while (j > 0 && needle[i] ! needle[j]) {j pi[j - …...

「Python大数据」数据采集-某东产品数据评论获取

前言 本文主要介绍通过python实现数据采集、脚本开发、办公自动化。数据内容范围:星级评分是1-3分、获取数据页面是前50页。 友情提示 法律分析:下列三种情况,爬虫有可能违法,严重的甚至构成犯罪: 爬虫程序规避网站经营者设置的反爬虫措施或者破解服务器防抓取措施,非法…...

ORACLE错误提示概述

OceanBase分布式数据库-海量数据 笔笔算数 保存起来方便自己查看错误代码。 ORA-00001: 违反唯一约束条件 (.) ORA-00017: 请求会话以设置跟踪事件 ORA-00018: 超出最大会话数 ORA-00019: 超出最大会话许可数 ORA-00020: 超出最大进程数 () ORA-00021: 会话附属于其它某些进程…...

2024年4月13日美团春招实习试题【第一题:好子矩阵】-题目+题解+在线评测【模拟】

2024年4月13日美团春招实习试题【第一题:好子矩阵】-题目题解在线评测【模拟】 题目描述&#xff1a;输入描述输出描述样例 解题思路一&#xff1a;模拟解题思路二&#xff1a;思路二解题思路三&#xff1a;直接判断 题目描述&#xff1a; 塔子哥定义一个矩阵是”好矩阵”&…...

python打卡day49

知识点回顾&#xff1a; 通道注意力模块复习空间注意力模块CBAM的定义 作业&#xff1a;尝试对今天的模型检查参数数目&#xff0c;并用tensorboard查看训练过程 import torch import torch.nn as nn# 定义通道注意力 class ChannelAttention(nn.Module):def __init__(self,…...

DeepSeek 赋能智慧能源:微电网优化调度的智能革新路径

目录 一、智慧能源微电网优化调度概述1.1 智慧能源微电网概念1.2 优化调度的重要性1.3 目前面临的挑战 二、DeepSeek 技术探秘2.1 DeepSeek 技术原理2.2 DeepSeek 独特优势2.3 DeepSeek 在 AI 领域地位 三、DeepSeek 在微电网优化调度中的应用剖析3.1 数据处理与分析3.2 预测与…...

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...

HTML 列表、表格、表单

1 列表标签 作用&#xff1a;布局内容排列整齐的区域 列表分类&#xff1a;无序列表、有序列表、定义列表。 例如&#xff1a; 1.1 无序列表 标签&#xff1a;ul 嵌套 li&#xff0c;ul是无序列表&#xff0c;li是列表条目。 注意事项&#xff1a; ul 标签里面只能包裹 li…...

WEB3全栈开发——面试专业技能点P2智能合约开发(Solidity)

一、Solidity合约开发 下面是 Solidity 合约开发 的概念、代码示例及讲解&#xff0c;适合用作学习或写简历项目背景说明。 &#x1f9e0; 一、概念简介&#xff1a;Solidity 合约开发 Solidity 是一种专门为 以太坊&#xff08;Ethereum&#xff09;平台编写智能合约的高级编…...

智能AI电话机器人系统的识别能力现状与发展水平

一、引言 随着人工智能技术的飞速发展&#xff0c;AI电话机器人系统已经从简单的自动应答工具演变为具备复杂交互能力的智能助手。这类系统结合了语音识别、自然语言处理、情感计算和机器学习等多项前沿技术&#xff0c;在客户服务、营销推广、信息查询等领域发挥着越来越重要…...

三分算法与DeepSeek辅助证明是单峰函数

前置 单峰函数有唯一的最大值&#xff0c;最大值左侧的数值严格单调递增&#xff0c;最大值右侧的数值严格单调递减。 单谷函数有唯一的最小值&#xff0c;最小值左侧的数值严格单调递减&#xff0c;最小值右侧的数值严格单调递增。 三分的本质 三分和二分一样都是通过不断缩…...

上位机开发过程中的设计模式体会(1):工厂方法模式、单例模式和生成器模式

简介 在我的 QT/C 开发工作中&#xff0c;合理运用设计模式极大地提高了代码的可维护性和可扩展性。本文将分享我在实际项目中应用的三种创造型模式&#xff1a;工厂方法模式、单例模式和生成器模式。 1. 工厂模式 (Factory Pattern) 应用场景 在我的 QT 项目中曾经有一个需…...

Windows 下端口占用排查与释放全攻略

Windows 下端口占用排查与释放全攻略​ 在开发和运维过程中&#xff0c;经常会遇到端口被占用的问题&#xff08;如 8080、3306 等常用端口&#xff09;。本文将详细介绍如何通过命令行和图形化界面快速定位并释放被占用的端口&#xff0c;帮助你高效解决此类问题。​ 一、准…...

用神经网络读懂你的“心情”:揭秘情绪识别系统背后的AI魔法

用神经网络读懂你的“心情”:揭秘情绪识别系统背后的AI魔法 大家好,我是Echo_Wish。最近刷短视频、看直播,有没有发现,越来越多的应用都开始“懂你”了——它们能感知你的情绪,推荐更合适的内容,甚至帮客服识别用户情绪,提升服务体验。这背后,神经网络在悄悄发力,撑起…...