【LeetCode 算法】Max Value of Equation 满足不等式的最大值-优先队列

文章目录

  • Max Value of Equation 满足不等式的最大值

Max Value of Equation 满足不等式的最大值

问题描述:

给你一个数组 points 和一个整数 k 。数组中每个元素都表示二维平面上的点的坐标,并按照横坐标 x 的值从小到大排序。也就是说 p o i n t s [ i ] = [ x i , y i ] points[i] = [x_i, y_i] points[i]=[xi,yi],并且在 1 < = i < j < = p o i n t s . l e n g t h 1 <= i < j <= points.length 1<=i<j<=points.length 的前提下, x i < x j x_i < x_j xi<xj 总成立。

请你找出 y i + y j + ∣ x i − x j ∣ y_i + y_j + |x_i - x_j| yi+yj+xixj 的 最大值,其中 ∣ x i − x j ∣ < = k 且 1 < = i < j < = p o i n t s . l e n g t h |x_i - x_j| <= k 且 1 <= i < j <= points.length xixj<=k1<=i<j<=points.length

题目测试数据保证至少存在一对能够满足 ∣ x i − x j ∣ < = k |x_i - x_j| <= k xixj<=k 的点。

2 < = p o i n t s . l e n g t h < = 1 0 4 p o i n t s [ i ] . l e n g t h = = 2 − 1 0 8 < = p o i n t s [ i ] [ 0 ] , p o i n t s [ i ] [ 1 ] < = 1 0 8 0 < = k < = 2 ∗ 1 0 8 对于所有的 1 < = i < j < = p o i n t s . l e n g t h , p o i n t s [ i ] [ 0 ] < p o i n t s [ j ] [ 0 ] 都成立。也就是说, x i 是严格递增的 2 <= points.length <= 10^4\\ points[i].length == 2\\ -10^8 <= points[i][0], points[i][1] <= 10^8\\ 0 <= k <= 2 * 10^8\\ 对于所有的1 <= i < j <= points.length ,points[i][0] < points[j][0] 都成立。也就是说,x_i 是严格递增的 2<=points.length<=104points[i].length==2108<=points[i][0],points[i][1]<=1080<=k<=2108对于所有的1<=i<j<=points.lengthpoints[i][0]<points[j][0]都成立。也就是说,xi是严格递增的

分析

其实这个问题谜底就在谜面上。
中文是满足不等式,英文是等式的最大值。

points是一堆二维平面坐标的数组,而且是以x非递减的顺序排列。

要求找出 y i + y j + ∣ x i − x j ∣ 的最大值, i < j y_i+y_j+|x_i-x_j|的最大值,i<j yi+yj+xixj的最大值,i<j

所以 j j j一定是在 i i i的右侧,而且 p o i n t s points points非递减,所以 x j > x i x_j>x_i xj>xi.
f = y i + y j + ∣ x i − x j ∣ f = y i + y j + x j − x i f = y_i+y_j+|x_i-x_j|\\ f = y_i+y_j+x_j-x_i f=yi+yj+xixjf=yi+yj+xjxi
为了f最大,当固定j时 y j + x j = C y_j+x_j = C yj+xj=C,
f = C + ( y i − x i ) f = C +(y_i-x_i) f=C+(yixi),所以最符合条件的 i i i 应该是 y i − x i y_i-x_i yixi 最大。

而k的存在就是对i和j的范围限制。

可以使用优先队列进行处理。 所以整体的时间复杂度大概为 O ( N l o g N ) O(NlogN) O(NlogN)

代码

优先队列

public int findMaxValueOfEquation(int[][] points, int k) { int n = points.length;//x,y-xPriorityQueue<int[]> pq = new PriorityQueue<int[]>((a,b)->{if(a[1]==b[1]) return a[0]-b[0];return b[1]-a[1];});int ans = Integer.MIN_VALUE;for(int i =0;i<n;){int[] p = points[i];int xj = p[0],yj = p[1];while(!pq.isEmpty()&& (xj - pq.peek()[0])>k){pq.poll();}// pq maybe null or at least one e.if(!pq.isEmpty()){//calc ans = Math.max(ans, xj+yj+pq.peek()[1]);}pq.offer(new int[]{ xj, yj-xj});i++;}return ans; }

时间复杂度 O ( N l o g N ) O(NlogN) O(NlogN)

空间复杂度 O ( k ) O(k) O(k)

Tag

Array

PriorityQueue

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

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

相关文章

【ShaderToy中图形效果转译到UnityShaderlab案例分享,实现粒子场_ParticleField】

Shader"ShaderToy/ParticleField" {Properties{_iMouse("iMouse", Vector) = (0,0,0,0)}SubSha

解密动态内存管理的奥秘(含内存4个函数)

目录 一.为什么存在动态内存管理 二.动态内存函数的介绍 1. malloc函数&#xff08;memory alloc 内存开辟&#xff09; 函数介绍&#xff1a; malloc函数使用举例代码&#xff1a; 2.free&#xff08;释放&#xff09; 函数介绍&#xff1a; 代码的示例&#xff1a…

C#WinForm获取当前活动子窗体使用鼠标滚轮事件改变窗体大小

获取当前活动子窗体使用鼠标滚轮事件改变窗体大小&#xff0c;实例在文末&#xff0c;可下载。 这个主要分三个重点 第一步 我们需要让子窗体显示在父窗体中 Form22 new Form2(); Form22.TopLevel false; // 不是顶级窗体 //Form22.Parent this;// 设置父窗体 一定不要…

配置NFS服务

环境 环境 ubuntu 10.4 vm 7.1 终端 ifconfig 得到 ubuntu资料 INET ADDR 192.168.0.4 BCAST 192.168.0.255 MASK 255.255.255.0 操作前先关闭防火墙 关闭防火墙&#xff1a; 命令&#xff1a;sudo ufw disable 打开防火墙 命令&#xff1a;sudo ufw enable 配置过程 一 安…

机器人SLAM导航学习-All in one

参考引用 张虎&#xff0c;机器人SLAM导航核心技术与实战[M]. 机械工业出版社&#xff0c;2022.本博客未详尽之处可自行查阅上述书籍 一、编程基础篇 1. ROS 入门必备知识 ROS学习笔记&#xff08;文章链接汇总&#xff09; 2. C 编程范式 《21天学通C》读书笔记&#xff0…

RabbitMQ

文章目录 RabbitMQ初识MQ同步和异步通讯同步通讯异步通讯 技术对比 RabbitMq安装RabbitMQ架构RabbitMQ消息模型publisher实现consumer实现总结 SpringAMQPBasic Queue 简单队列模型WorkQueue发布/订阅FanoutDirectTopic 消息转换器 RabbitMQ 初识MQ 同步和异步通讯 微服务间…

[数据集][目标检测]空中飞鸟目标检测数据集VOC格式4955张

数据集名称&#xff1a;空中飞鸟数据集VOC-4955张 数据集制作单位&#xff1a;未来自主研究中心(FIRC) 图片数量(jpg文件个数)&#xff1a;4955 标注数量(xml文件个数)&#xff1a;4955 标注类别数&#xff1a;1 标注类别名称:["bird"] 每个类别标注的框数&#xff1…

力扣刷题SQL-197. 上升的温度---分步解题

表&#xff1a; Weather ------------------------ | Column Name | Type | ------------------------ | id | int | | recordDate | date | | temperature | int | ------------------------ id 是这个表的主键 该表包含特定日期的温度信息编…

【C语言】指针进阶(3)

目录 指针和数组笔试题解析 一维数组 字符数组 二维数组 指针笔试题 在前面两篇文章&#xff0c;我们已经学完了指针进阶的所有知识点。在这篇文章中&#xff0c;我们主要学习的是一些常见的笔试题的总结。 指针和数组笔试题解析 在做题之前&#xff0c;我们先复习一下之…

AC自动机(java)

AC自动机 AC自动机介绍代码演示 indexTree AC自动机介绍 AC自动机算法是一种基于Trie树和有限状态机的字符串匹配算法。它在查找字符串时&#xff0c;利用额外的失配指针进行回退&#xff0c;转向其他分支&#xff0c;避免重复匹配前缀&#xff0c;从而提高算法效率。当一个字典…

Docker 教程

Docker 是一个开源的应用容器引擎&#xff0c;基于 Go 语言并遵从 Apache2.0 协议开源。 Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中&#xff0c;然后发布到任何流行的 Linux 机器上&#xff0c;也可以实现虚拟化。 容器是完全使用沙箱机制&a…

【CSDN竞赛】练习题(练手题)及解析(含代码+注释):小玉家的电费;饿龙咆哮-逃离城堡;收件邮箱;寻找宝藏山

订阅专栏,学习更多干货知识! 为想要参与CSDN竞赛的朋友提供几道练手题目及解决方案。含有题目描述以及不同编程语言的解决方案。 💿目录 🏮一、题目一:小玉家的电费📂1.1 题目描述📂1.2 示例代码🏮二、题目二:饿龙咆哮-逃离城堡📂2.1 题目描述📂2.2 示例代码…

Unity动画数据的导出和导入

一、在Unity中使用JSON存储和读取动画数据流程 1.定义动画数据类 2. 将动画数据序列化为JSON字符串。可以使用JsonUtility.ToJson()方法实现。 3. 将JSON字符串保存到文件中,例如使用File.WriteAllText()写入。 4. 读取时,从文件中读取JSON字符串,使用JsonUtility.FromJson()反…

什么是Redis?

什么是Redis 什么是Redis一、特性1. 支持多种数据结构2. 读/写速度快&#xff0c;性能高。3. 支持持久化。4. 实现高可用主从复制&#xff0c;主节点做数据副本。5. 实现分布式集群和高可用。 二、基本数据类型string&#xff08;字符串&#xff09;list(双向链表)set(集合)zse…

基于Java+SpringBoot+Vue前后端分离旅游网站详细设计和实现

博主介绍&#xff1a;✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专…

UE5 AI移动无动作问题

文章目录 问题背景解决方法问题背景 在使用行为树让角色移动时,出现角色行走不播放动作的情况: 解决方法 其实有2个问题导致出现这种情况 1、角色动画蓝图的问题 角色动画蓝图可能存在4个问题: ① 无播放行走动画 ② 速度的值未正常传递 ③ 播放移动动作逻辑的值判断错…

【shell脚本】shell脚本之正则表达式、sed基本用法、sed文本块处理(shell脚本基础学习四)

恭喜你&#xff0c;找到宝藏博主了&#xff0c;这里会分享shell的学习整过程。 shell 对于运维来说是必备技能之一&#xff0c;它可以提高很多运维重复工作&#xff0c;提高效率。 shell的专栏&#xff0c;我会详细地讲解shell的基础和使用&#xff0c;以及一些比较常用的she…

Windows Docker部署springboot微服务

Windows Docker部署springboot微服务 前言 偶然的机会让我能够实操在Windows server 2019版本的服务器上进行springCloud服务的部署 过程中深刻的体会到了为什么Docker要推荐使用Linux系列的系统进行操作 遇到的问题 springboot镜像打包微服务启动后nacos连不上使用的基础…

[SSM]手写Spring框架

目录 十一、手写Spring框架 第一步&#xff1a;创建模块myspring 第二步&#xff1a;准备好要管理的Bean 第三步&#xff1a;准备myspring.xml配置文件 第四步&#xff1a;核心接口实现 第五步&#xff1a;实例化Bean 第六步&#xff1a;给Bean属性赋值 第七步&#xff…

使用nginx和ffmpeg搭建HTTP FLV流媒体服务器(摄像头RTSP视频流->RTMP->http-flv)

名词解释 RTSP &#xff08;Real-Time Streaming Protocol&#xff09; 是一种网络协议&#xff0c;用于控制实时流媒体的传输。它是一种应用层协议&#xff0c;通常用于在客户端和流媒体服务器之间建立和控制媒体流的传输。RTSP允许客户端向服务器发送请求&#xff0c;如…