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

Leetcode 3382. Maximum Area Rectangle With Point Constraints II

  • Leetcode 3382. Maximum Area Rectangle With Point Constraints II
    • 1. 解题思路
    • 2. 代码实现
  • 题目链接:3382. Maximum Area Rectangle With Point Constraints II

1. 解题思路

这一题是题目3380. Maximum Area Rectangle With Point Constraints I的进阶版,两者内容上是完全相同的,但是要求的时间复杂度上面天差地别,前者还可以使用暴力循环的方式在 O ( N 2 ) O(N^2) O(N2)的时间复杂度当中完成,而后者就完全不行了,必须对其进行优化。

而这里的优化方法则是使用了分段树(Segment Tree),关于分段树的相关内容网上已经有非常多的介绍了,我自己也整理过一个小文章来做备忘(经典算法:Segment Tree),因此这里就不做过多的展开了,有兴趣的读者可以移步去了解一下相关的内容。

我们就直接介绍一下这里的核心思路吧,我的思路的话就是首先将所有的点按照 ( x , y ) (x, y) (x,y)进行有序排列,然后,我们顺序考察每一个点作为右侧上顶点的情况,此时,之前的所有点显然 x x x坐标均不大于当前点的 x x x坐标,因此,我们只需要考察是否在其前方能够找到3个点,使之构成一个满足条件的矩形,然后更新我们的最大面积即可。

要满足题目条件,事实上,我们就是要满足下述条件:

  1. 显然,其前一个点必须与当前点的 x x x坐标相同,作为矩形的右下顶点;
  2. 当前顶点(右上顶点)与前一点(右下顶点)所处两处的 y y y坐标上之前最近的点均存在且对应的 x x x坐标相同
  3. 在上述4个顶点所组成的矩阵当中,不存在其他的点,即对应的 y y y区间之中,所有点的 x x x坐标均需要小于2中给出的左边界上两个点的 x x x坐标。

可以看到,对于第三点,事实上就是要求范围内的最大值,因此就可以完美使用segment tree来进行实现了。

2. 代码实现

给出python代码实现:

class SegmentTree:def __init__(self, arr):self.length = len(arr)self.tree = self.build(arr)def feature_func(self, *args):return max(args)def build(self, arr):n = len(arr)tree = [0 for _ in range(2*n)]for i in range(n):tree[i+n] = arr[i]for i in range(n-1, 0, -1):tree[i] = self.feature_func(tree[i<<1], tree[(i<<1) | 1])return treedef update(self, idx, val):idx = idx + self.lengthself.tree[idx] = valwhile idx > 1:self.tree[idx>>1] = self.feature_func(self.tree[idx], self.tree[idx ^ 1])idx = idx>>1returndef query_range(self, lb, rb):lb += self.length rb += self.lengthnodes = []while lb < rb:if lb & 1 == 1:nodes.append(self.tree[lb])lb += 1if rb & 1 == 0:nodes.append(self.tree[rb])rb -= 1lb = lb >> 1rb = rb >> 1if lb == rb:nodes.append(self.tree[rb])return self.feature_func(*nodes)def query(self, idx):return self.tree[idx + self.length]class Solution:def maxRectangleArea(self, xCoord: List[int], yCoord: List[int]) -> int:points = [(x, y) for x, y in zip(xCoord, yCoord)]n = len(points)points = sorted(points)cols = sorted(set(yCoord))closest = SegmentTree([-1 for _ in cols])ans = -1for i in range(n-1):y1_idx = bisect.bisect_left(cols, points[i][1])if points[i][0] == points[i+1][0]:y2_idx = bisect.bisect_left(cols, points[i+1][1])x1 = closest.query(y1_idx)x2 = closest.query(y2_idx)if x1 != -1 and x2 != -1 and x1 == x2:S = (points[i+1][1] - points[i][1]) * (points[i][0] - x1)if S >= ans and (y2_idx - y1_idx <= 1 or closest.query_range(y1_idx+1, y2_idx-1) < x1):ans = max(ans, S)closest.update(y1_idx, points[i][0])return ans

提交代码评测得到:耗时3270ms,占用内存67.6MB。

相关文章:

Leetcode 3382. Maximum Area Rectangle With Point Constraints II

Leetcode 3382. Maximum Area Rectangle With Point Constraints II 1. 解题思路2. 代码实现 题目链接&#xff1a;3382. Maximum Area Rectangle With Point Constraints II 1. 解题思路 这一题是题目3380. Maximum Area Rectangle With Point Constraints I的进阶版&#…...

MitelMiCollab 身份绕过导致任意文件读取漏洞复现(CVE-2024-41713)

0x01 产品描述: Mitel MiCollab 是一个企业协作平台,它将各种通信工具整合到一个应用程序中,提供语音和视频通话、消息传递、状态信息、音频会议、移动支持和团队协作功能。0x02 漏洞描述: Mitel MiCollab 的 NuPoint 统一消息 (NPM) 组件中存在身份验证绕过漏洞,由于输入…...

DVWA 靶场 SQL 注入报错 Illegal mix of collations for operation ‘UNION‘ 的解决方案

在 dvwa 靶场进行联合 SQL 注入时&#xff0c;遇到报错 Illegal mix of collations for operation UNION报错如下图&#xff1a; 解决办法&#xff1a; 找到文件MySQL.php 大致位置在dvwaincludesDBMS 目录下 使用编辑器打开 检索$create_db 第一个就是 在{$_DVWA[ ‘db_d…...

京准电钟分享:医院网络内NTP时间同步服务器作用是什么?

京准电钟分享&#xff1a;医院网络内NTP时间同步服务器作用是什么&#xff1f; 京准电钟分享&#xff1a;医院网络内NTP时间同步服务器作用是什么&#xff1f; 时间同步技术必定将是整个大数据处理系统的重要支撑和保障。时间同步技术使数据产生与处理系统的所有节点具有全局…...

HTML DOM API

HTMLInputElement HTMLInputElement 接口提供了特定的属性和方法&#xff0c;用于管理 <input> 元素的选项、布局和外观。 HTMLInputElement 和 <input> 之间的关系可以理解为接口与具体元素的关系&#xff1a; <input> 元素&#xff1a; <input> 是…...

java时间处理SimpleDateFormat详解

文章目录 常用构造函数日期格式模式常见用法1. 格式化日期2. 解析日期字符串 注意事项示例扩展&#xff1a;指定区域和时区 SimpleDateFormat 是 Java 中用于日期和时间格式化的类&#xff0c;属于 java.text 包。它允许开发者将日期对象格式化为字符串&#xff0c;或者将字符…...

redis-stack redisSearch环境安装搭建

RedisSearch在redis许可证变更之后显得是redis中的一大特色&#xff0c;闲来无事学习记录一下。 尝试通过源码编译redisSearch&#xff0c;貌似非常费劲&#xff0c;所以建议使用docker或者Linux的发行包进行安装redis-stack。redis-stack是基于redis的模块化机制进行一个扩展…...

go返回多个errors

起因 有时候大家可能需要返回多个errors的场景&#xff0c;所以这个时候可能就会考虑如何实现、怎么实现比较好 实现 package mainimport ("errors""fmt" )func main() {errs : retErrors("hello,world")fmt.Println(errs) }func retErrors(t…...

Monkey结合appium模拟操作特定界面

目录 1. 使用 Monkey 操作特定界面&#xff08;通过UI标识来限制&#xff09; 2. 结合 uiautomator 或 appium 定位特定元素 步骤&#xff1a; 3. 使用 Monkey Appium 控制特定界面点击 4. 如何结合 Appium 与 Monkey 5. 限制 Monkey 只点击固定界面上的元素 使用 --pc…...

Ubuntu22.04深度学习环境安装【cuda+cudnn】

为了复现一篇深度学习论文&#xff0c;特意安装了Linux系统。前一天已经安装Linux显卡驱动&#xff0c;现在需要安装cuda、cudnn等。 论文代码 论文PDF 确定包版本&#xff1a; 根据论文提供的代码。在requirements.txt中发现cuda版本为11.7,cudnn为8.5.0&#xff0c;python没…...

go语言的sdk项目搭建与git 操作标签tag并推送至远程仓库

在搭建 SDK 项目并结合 Git 操作标签&#xff08;Tag&#xff09;时&#xff0c;通常会涉及项目初始化、版本管理、Git 标签的创建与管理等内容。以下是一个完整的步骤指南&#xff0c;帮助您搭建 SDK 项目并学习如何使用 Git 标签。 ### 1. **搭建 SDK 项目** 首先&#xff…...

从零用java实现 小红书 springboot vue uniapp (1)

前言 偶尔会用小红书发一些笔记 闲来无事 想自己实现一个小红书 正好可以学习一下 帖子 留言 im 好友 推送 等功能 下面我们就从零 开发一个小红书 后台依旧用我们的会员系统的脚手架 演示 http://120.26.95.195:8889/ 客户端我们使用uniapp 我们首先对主页进行一个分解 顶部我…...

Python爬虫——HTML中Xpath定位

Xpath是一种路径查询语言。利用一个路径表达式从html文档中找到我们需要的数据位置&#xff0c;进而将其写入到本地或者数据库中。 学习Xpath爬虫&#xff0c;我们首先学习一下python中lxml库 关于库 lxml 终端下载Xpath需要用到的模块 pip install lxml 关于HTML 超文本标…...

电脑无法识别usb设备怎么办?电脑无法识别usb解决方法

usb设备是我们常解除的外部操作以及存储设备&#xff0c;它可以方便用户数据传输以及操作输入。但在使用过程中&#xff0c;大家基本都碰到过电脑无法识别usb设备这种情况。这种情况下&#xff0c;我们应该怎么办呢&#xff1f;下面将为你介绍几种可能的原因和解决方法&#xf…...

思特奇政·企数智化产品服务平台正式发布,助力运营商政企数智能力跃迁

数字浪潮下,产业数字化进程加速发展,信息服务迎来更广阔的天地,同时也为运营商政企支撑系统提出了更高要求。12月4日,2024数字科技生态大会期间,思特奇正式发布政企数智化产品服务平台,融合应用大数据、AI等新质生产要素,构建集平台服务、精准营销、全周期运营支撑、智慧大脑于…...

【Springboot3+vue3】从零到一搭建Springboot3+vue3前后端分离项目之前端环境搭建

【Springboot3vue3】从零到一搭建Springboot3vue3前后端分离项目之前端环境搭建 2 前端环境搭建2.1 环境准备2.2 创建Vue3项目2.3 项目搭建准备2.4 安装Element Plus2.5 安装axios2.5.1 配置&#xff08;创建实例&#xff0c;配置请求&#xff0c;响应拦截器&#xff09;2.5.2 …...

手写Mybatis框架源码(简写)

pom文件&#xff1a; springboot版本&#xff1a;2.6.5 jdk&#xff1a;8 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance&q…...

Flask返回中文Unicode编码(乱码)解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…...

最大值和最小值的差

最大值和最小值的差 C语言代码C 语言代码Java语言代码Python语言代码 &#x1f490;The Begin&#x1f490;点点关注&#xff0c;收藏不迷路&#x1f490; 输出一个整数序列中最大的数和最小的数的差。 输入 第一行为M&#xff0c;表示整数个数&#xff0c;整数个数不会大于1…...

如何在 IntelliJ IDEA 中为 Spring Boot 应用实现热部署

文章目录 1. 引言2. 准备工作3. 添加必要的依赖4. 配置 IntelliJ IDEA4.1 启用自动编译4.2 开启热部署策略 5. 测试热部署6. 高级技巧7. 注意事项8. 总结 随着现代开发工具的进步&#xff0c;开发者们越来越重视提高生产力的特性。对于 Java 开发者来说&#xff0c;能够在不重启…...

NASM调试指南:如何高效定位和修复汇编错误

NASM调试指南&#xff1a;如何高效定位和修复汇编错误 【免费下载链接】nasm A cross-platform x86 assembler with an Intel-like syntax 项目地址: https://gitcode.com/gh_mirrors/na/nasm NASM&#xff08;Netwide Assembler&#xff09;作为一款跨平台的x86汇编器&…...

Java调用动态库总崩溃?从SIGSEGV日志反向定位到C端ABI兼容性缺陷——一线故障复盘(含GDB+Java Core联合调试全流程)

第一章&#xff1a;Java调用动态库总崩溃&#xff1f;从SIGSEGV日志反向定位到C端ABI兼容性缺陷——一线故障复盘&#xff08;含GDBJava Core联合调试全流程&#xff09;某金融风控系统在JDK 17 Alpine Linux&#xff08;musl libc&#xff09;环境下频繁触发 JVM Crash&#…...

新手友好:借助快马AI零基础实现openclaw101官网登录功能入门教程

今天想和大家分享一个特别适合编程新手的实践项目——如何用最简单的方式实现一个网站登录功能。作为一个刚入门的前端学习者&#xff0c;我发现登录功能看似简单&#xff0c;其实包含了很多核心知识点。通过InsCode(快马)平台&#xff0c;我们可以轻松获得一个完整可运行的登录…...

SSM+Vue医院食堂订餐系统源码+论文

代码可以查看文章末尾⬇️联系方式获取&#xff0c;记得注明来意哦~&#x1f339; 分享万套开题报告任务书答辩PPT模板 作者完整代码目录供你选择&#xff1a; 《SpringBoot网站项目》1800套 《SSM网站项目》1500套 《小程序项目》1600套 《APP项目》1500套 《Python网站项目》…...

OpenClaw自动化简历投递:Qwen3-14B智能匹配职位要求

OpenClaw自动化简历投递&#xff1a;Qwen3-14B智能匹配职位要求 1. 为什么需要自动化简历投递&#xff1f; 去年秋天&#xff0c;当我开始寻找新的工作机会时&#xff0c;面对数百个招聘岗位&#xff0c;我陷入了"海投困境"&#xff1a;每份简历都需要根据JD(职位描…...

InstantID社区翻译计划:多语言支持的实现与贡献方式

InstantID社区翻译计划&#xff1a;多语言支持的实现与贡献方式 【免费下载链接】InstantID 项目地址: https://ai.gitcode.com/hf_mirrors/InstantX/InstantID InstantID作为一款创新的AI人脸编辑工具&#xff0c;正通过社区翻译计划打破语言壁垒&#xff0c;让全球用…...

NVIDIA Profile Inspector终极指南:如何免费解锁显卡隐藏性能

NVIDIA Profile Inspector终极指南&#xff1a;如何免费解锁显卡隐藏性能 【免费下载链接】nvidiaProfileInspector 项目地址: https://gitcode.com/gh_mirrors/nv/nvidiaProfileInspector 想要让游戏运行更流畅、画面更清晰吗&#xff1f;NVIDIA显卡驱动中隐藏着大量可…...

别等宕机才后悔!UPS蓄电池定期巡检,这4点才是核心!

&#xff5c;机房里设备林立&#xff0c;大多数人把目光聚焦在服务器、精密空调上。但其实&#xff0c;潜伏在机房角落的“隐形杀手”&#xff0c;往往是看起来默默无闻的UPS蓄电池。今天我们不谈复杂的技术参数&#xff0c;只用大白话讲清楚&#xff1a;为什么蓄电池必须定期巡…...

seo sem公司如何制定营销策略

SEO SEM公司如何制定有效的营销策略 在当今数字化时代&#xff0c;SEO&#xff08;搜索引擎优化&#xff09;和SEM&#xff08;搜索引擎营销&#xff09;已经成为企业推广和品牌建立的关键组成部分。无论是中小企业还是大型跨国公司&#xff0c;它们都需要高效、精准的营销策略…...

个人知识库构建:OpenClaw+千问3.5-27B自动整理碎片化笔记

个人知识库构建&#xff1a;OpenClaw千问3.5-27B自动整理碎片化笔记 1. 为什么需要智能知识管理 作为一个常年被信息过载困扰的技术写作者&#xff0c;我的笔记系统曾经像一座杂乱无章的仓库。微信收藏夹里躺着2000未读文章&#xff0c;Obsidian里有500多个零散笔记&#xff…...