发布时间:2026/6/26 11:00:05
Kimi    LeetCode 3382. 用点构造面积最大的矩形 II C语言实现
以下是 LeetCode 3382. 用点构造面积最大的矩形 II 的 C 语言实现采用 线段树 坐标离散化时间复杂度 O(n \log n)c#include stdlib.h#include string.htypedef struct {int x;int y;} Point;/* 按 x 排序x 相同按 y 排序 */int cmp_point(const void *a, const void *b) {Point *p1 (Point*)a;Point *p2 (Point*)b;if (p1-x ! p2-x) return p1-x - p2-x;return p1-y - p2-y;}int cmp_int(const void *a, const void *b) {return *(int*)a - *(int*)b;}/* 二分查找 y 在离散化数组中的索引 */int find_idx(int *ys, int n, int y) {int l 0, r n - 1;while (l r) {int mid l (r - l) / 2;if (ys[mid] y) return mid;if (ys[mid] y) l mid 1;else r mid - 1;}return -1;}/* 不小于 x 的最小 2 的幂 */int next_pow2(int x) {int n 1;while (n x) n 1;return n;}/* 迭代式线段树维护区间最大值 */typedef struct {int n; // 扩展为 2 的幂后的大小int *tree;} SegTree;SegTree* seg_tree_create(int size) {SegTree *st (SegTree*)malloc(sizeof(SegTree));st-n next_pow2(size);st-tree (int*)malloc(sizeof(int) * 2 * st-n);for (int i 0; i 2 * st-n; i) st-tree[i] -1;return st;}void seg_tree_free(SegTree *st) {free(st-tree);free(st);}void seg_tree_update(SegTree *st, int pos, int val) {int i pos st-n;st-tree[i] val;for (i 1; i 0; i 1) {int left st-tree[i 1];int right st-tree[(i 1) | 1];st-tree[i] left right ? left : right;}}/* 查询 [l, r) 区间最大值左闭右开 */int seg_tree_query_range(SegTree *st, int l, int r) {if (l r) return -1;int res -1;l st-n;r st-n;while (l r) {if (l 1) {if (st-tree[l] res) res st-tree[l];l;}if (r 1) {r--;if (st-tree[r] res) res st-tree[r];}l 1;r 1;}return res;}int seg_tree_query_point(SegTree *st, int pos) {return st-tree[pos st-n];}/* LeetCode 函数签名 */long long maxRectangleArea(int* xCoord, int xCoordSize, int* yCoord, int yCoordSize) {int n xCoordSize;Point *points (Point*)malloc(sizeof(Point) * n);for (int i 0; i n; i) {points[i].x xCoord[i];points[i].y yCoord[i];}qsort(points, n, sizeof(Point), cmp_point);/* y 坐标离散化 */int *ys (int*)malloc(sizeof(int) * n);memcpy(ys, yCoord, sizeof(int) * n);qsort(ys, n, sizeof(int), cmp_int);int m 0;for (int i 0; i n; i) {if (i 0 || ys[i] ! ys[i-1]) ys[m] ys[i];}SegTree *st seg_tree_create(m);long long ans -1;for (int i 0; i n - 1; i) {int y1_idx find_idx(ys, m, points[i].y);/* 相邻两点 x 相同可能构成矩形右侧边 */if (points[i].x points[i1].x) {int y2_idx find_idx(ys, m, points[i1].y);int x1 seg_tree_query_point(st, y1_idx);int x2 seg_tree_query_point(st, y2_idx);/* 左侧两个顶点的 x 坐标必须相同 */if (x1 ! -1 x2 ! -1 x1 x2) {long long h (long long)points[i1].y - points[i].y;long long w (long long)points[i].x - x1;long long area h * w;/* 检查矩形内部是否无其他点区间 (y1, y2) 内所有点的 x 均 x1 */if (y2_idx - y1_idx 1 || seg_tree_query_range(st, y1_idx 1, y2_idx) x1) {if (area ans) ans area;}}}/* 将当前点加入线段树 */seg_tree_update(st, y1_idx, points[i].x);}seg_tree_free(st);free(points);free(ys);return ans;}关键点说明要点 说明排序扫描 按 x 排序后从小到大扫描保证已处理点都在当前点左侧离散化 qsort 去重后用二分查找bsearch 手动实现将 y 映射到索引线段树 迭代式实现将大小扩展至最近的 2 的幂确保区间查询正确性区间查询 采用左闭右开 [l, r) 语义查询 (y1, y2) 内部是否有 x ≥ x1 的点面积计算 使用 long long 避免 int 乘法溢出复杂度- 时间O(n \log n)排序 每次线段树操作- 空间O(n)点数组、离散化数组、线段树

相关新闻

深入解析PowerQUICC III缓存与内存管理:从原理到嵌入式系统优化实践
2026/6/26 11:00:05

深入解析PowerQUICC III缓存与内存管理:从原理到嵌入式系统优化实践

1. 项目概述与核心价值如果你在嵌入式系统,尤其是通信、网络设备或工业控制领域做过开发,大概率听说过Freescale(现NXP)的PowerQUICC系列处理器。这个系列曾是通信处理器的标杆,而PowerQUICC III(比如MPC85…

阅读更多
MUMmer实战指南:如何高效完成基因组序列比对与分析的5个专业技巧
2026/6/26 10:00:05

MUMmer实战指南:如何高效完成基因组序列比对与分析的5个专业技巧

MUMmer实战指南:如何高效完成基因组序列比对与分析的5个专业技巧 【免费下载链接】mummer Mummer alignment tool 项目地址: https://gitcode.com/gh_mirrors/mu/mummer MUMmer是一款专为大规模基因组序列比对设计的高性能工具,能够快速完成DNA和…

阅读更多
微软Copilot集成实战:AI工作流熔断与岗位能力重构指南
2026/6/26 10:00:05

微软Copilot集成实战:AI工作流熔断与岗位能力重构指南

1. 项目概述:当“AI优先”不再是一句口号,而是HR系统里跳动的红色数字“9,000 Jobs Gone: Microsoft’s AI Pivot Just Got Brutally Real”——这个标题不是财经媒体的耸人听闻,而是2024年春季真实滚过科技圈的一记闷雷。我本人在微软生态里…

阅读更多
从零构建结构有限元求解器:核心算法、代码实现与性能优化
2026/6/26 13:00:06

从零构建结构有限元求解器:核心算法、代码实现与性能优化

1. 项目概述:从“黑盒”到“白盒”的有限元求解器在工程仿真领域,我们常常会用到各种商业软件,它们功能强大,界面友好,但内部的核心求解过程对我们而言,往往是一个“黑盒”。我们输入模型、材料、载荷和边界…

阅读更多
嵌入式GUI字体技术:从TrueType原理到emWin API实战
2026/6/26 13:00:06

嵌入式GUI字体技术:从TrueType原理到emWin API实战

1. 嵌入式GUI字体技术全景解析:从TrueType到emWin API的深度实践 在嵌入式图形界面开发的世界里,字体渲染从来都不是一个简单的“显示文字”问题。它直接关系到用户体验的细腻程度、产品界面的专业感,以及系统资源的精打细算。回想我早期做车…

阅读更多
2026论文冲刺周:文献真实性、格式合规性、全文逻辑检查,谁更省命
2026/6/26 13:00:06

2026论文冲刺周:文献真实性、格式合规性、全文逻辑检查,谁更省命

先说一个很多学生会直接搜的词:雷小兔智能排版。如果你现在卡在毕业论文、期刊投稿、参考文献格式和Word排版上,这个入口本身就很对路。这次我不走“体验一下很好用”那套软文话术,直接按数码博主测评思路来拆。核心就三个维度:文…

阅读更多
RPA自动化测试集成方案:Python与pytest结合signal-cli实现Signal消息验证
2026/6/26 13:00:06

RPA自动化测试集成方案:Python与pytest结合signal-cli实现Signal消息验证

1. 项目概述:为什么我们需要这个集成方案?如果你正在做RPA(机器人流程自动化)或者自动化测试,尤其是涉及到即时通讯工具的业务流程验证,那你肯定遇到过这个头疼的问题:如何自动化地验证那些发送…

阅读更多
如何让微信聊天记录不再消失?WeChatMsg开源工具完全指南
2026/6/26 13:00:06

如何让微信聊天记录不再消失?WeChatMsg开源工具完全指南

如何让微信聊天记录不再消失?WeChatMsg开源工具完全指南 【免费下载链接】WeChatMsg 提取微信聊天记录,将其导出成HTML、Word、CSV文档永久保存,对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Trending/we/WeC…

阅读更多
MusicFree插件完全指南:3步打造你的终极免费音乐播放器
2026/6/26 12:00:06

MusicFree插件完全指南:3步打造你的终极免费音乐播放器

MusicFree插件完全指南:3步打造你的终极免费音乐播放器 【免费下载链接】MusicFreePlugins MusicFree播放插件 项目地址: https://gitcode.com/gh_mirrors/mu/MusicFreePlugins 还在为音乐平台会员费烦恼吗?MusicFree插件系统让你用一个应用听遍全…

阅读更多
嵌入式语音编解码实战:G.726 ADPCM库集成与优化指南
2026/6/25 12:25:54

嵌入式语音编解码实战:G.726 ADPCM库集成与优化指南

1. 项目概述与G.726 ADPCM技术背景在嵌入式语音处理领域,带宽和存储资源往往是寸土寸金的。如果你做过对讲机、VoIP网关或者早期的数字录音设备,一定对如何在有限的比特率下保住语音可懂度这件事深有感触。我当年接手一个车载调度系统的项目,…

阅读更多
ITU656格式化器寄存器配置实战:VBI数据处理与VCR特技播放兼容性
2026/6/25 22:07:52

ITU656格式化器寄存器配置实战:VBI数据处理与VCR特技播放兼容性

1. 项目概述与核心挑战在数字视频处理领域,将原始的视频数据、同步时序以及各种辅助信息打包成一个标准、稳定的串行数据流,是确保设备间互联互通的基础。ITU-R BT.656标准(常简称为ITU656)正是为此而生的一套“交通规则”。它定义…

阅读更多
嵌入式GUI开发实战:emWin环境搭建、配置优化与性能调优指南
2026/6/25 20:03:50

嵌入式GUI开发实战:emWin环境搭建、配置优化与性能调优指南

1. 项目概述与emWin核心价值解析在嵌入式系统开发领域,人机交互(HMI)的设计正从简单的LED指示灯和按键,快速向全彩图形化界面演进。无论是智能家电上的触摸屏、工业PLC的操作面板,还是医疗设备的参数显示,一…

阅读更多
计算机毕业设计之基于Java的流浪动物收养系统设计与开发
2026/6/26 0:00:04

计算机毕业设计之基于Java的流浪动物收养系统设计与开发

时代在飞速进步,每个行业都在努力发展现在先进技术,通过这些先进的技术来提高自己的水平和优势,流浪动物收养系统当然不能排除在外。流浪动物收养系统是在实际应用和软件工程的开发原理之上,运用java语言以及SSM框架进行开发。首先…

阅读更多
技术线上面试代码写完就以为通关?留学生利用黑盒测试自证风控「蒸汽教育分享」
2026/6/26 0:00:04

技术线上面试代码写完就以为通关?留学生利用黑盒测试自证风控「蒸汽教育分享」

在线上白板编程(Coding)或算法实战轮次中,不少代码基本功扎实的技术新人,在跑通了题目主干逻辑的第一时间,会习惯性地向评委表示“我写完了”。这在极其注重系统稳定性的研发总监和资深架构师眼里,往往暴露…

阅读更多
暗黑2存档编辑器终极指南:5分钟快速掌握d2s-editor完整使用教程
2026/6/26 0:00:04

暗黑2存档编辑器终极指南:5分钟快速掌握d2s-editor完整使用教程

暗黑2存档编辑器终极指南:5分钟快速掌握d2s-editor完整使用教程 【免费下载链接】d2s-editor 项目地址: https://gitcode.com/gh_mirrors/d2/d2s-editor 你是否厌倦了在暗黑破坏神2中反复刷装备的枯燥过程?是否想快速测试不同的职业build却不想花…

阅读更多
GIT修改用户名
2026/6/26 3:53:45

GIT修改用户名

在GIT中修改用户名可按以下步骤操作: 查看当前git的用户名,使用命令git config --list或git config user.name。修改git用户名,使用命令git config --global user.name "xxx(新的用户名)",将其中…

阅读更多
Win11Debloat:让你的Windows系统重获新生的终极优化工具
2026/6/23 23:39:46

Win11Debloat:让你的Windows系统重获新生的终极优化工具

Win11Debloat:让你的Windows系统重获新生的终极优化工具 【免费下载链接】Win11Debloat A simple, lightweight PowerShell script that allows you to remove pre-installed apps, disable telemetry, as well as perform various other changes to declutter and …

阅读更多
技术深度解析:m4s-converter实现原理与B站缓存视频转换最佳实践
2026/6/24 18:38:44

技术深度解析:m4s-converter实现原理与B站缓存视频转换最佳实践

技术深度解析:m4s-converter实现原理与B站缓存视频转换最佳实践 【免费下载链接】m4s-converter 一个跨平台小工具,将bilibili缓存的m4s格式音视频文件合并成mp4 项目地址: https://gitcode.com/gh_mirrors/m4/m4s-converter m4s-converter是一个…

阅读更多