news 2026/6/26 11:57:56

Kimi LeetCode 3382. 用点构造面积最大的矩形 II Rust实现

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Kimi LeetCode 3382. 用点构造面积最大的矩形 II Rust实现

以下是 LeetCode 3382. 用点构造面积最大的矩形 II 的 Rust 实现:

```rust
use std::collections::HashMap;

struct SegmentTree {
n: usize,
tree: Vec<i32>,
}

impl SegmentTree {
fn new(n: usize) -> Self {
SegmentTree {
n,
tree: vec![-1; 2 * n],
}
}

fn update(&mut self, idx: usize, val: i32) {
let mut i = idx + self.n;
self.tree[i] = val;
while i > 1 {
i >>= 1;
self.tree[i] = self.tree[i << 1].max(self.tree[(i << 1) | 1]);
}
}

fn query(&self, idx: usize) -> i32 {
self.tree[idx + self.n]
}

fn query_range(&self, mut l: usize, mut r: usize) -> i32 {
if l > r {
return -1;
}
l += self.n;
r += self.n;
let mut res = -1;
while l <= r {
if l & 1 == 1 {
res = res.max(self.tree[l]);
l += 1;
}
if r & 1 == 0 {
res = res.max(self.tree[r]);
r -= 1;
}
l >>= 1;
r >>= 1;
}
res
}
}

impl Solution {
pub fn max_rectangle_area(x_coord: Vec<i32>, y_coord: Vec<i32>) -> i64 {
let n = x_coord.len();
let mut points: Vec<(i32, i32)> = x_coord.into_iter()
.zip(y_coord.into_iter())
.collect();
points.sort_unstable();

// y 坐标离散化
let mut ys: Vec<i32> = points.iter().map(|&(_, y)| y).collect();
ys.sort_unstable();
ys.dedup();
let m = ys.len();

let mut y_to_idx: HashMap<i32, usize> = HashMap::with_capacity(m);
for (i, &y) in ys.iter().enumerate() {
y_to_idx.insert(y, i);
}

let mut seg = SegmentTree::new(m);
let mut ans: i64 = -1;

for i in 0..n - 1 {
let y1 = points[i].1;
let y1_idx = *y_to_idx.get(&y1).unwrap();

// 相邻两点 x 相同,可能构成矩形右侧边
if points[i].0 == points[i + 1].0 {
let y2 = points[i + 1].1;
let y2_idx = *y_to_idx.get(&y2).unwrap();

let x1 = seg.query(y1_idx);
let x2 = seg.query(y2_idx);

// 左侧两个顶点的 x 坐标必须相同
if x1 != -1 && x2 != -1 && x1 == x2 {
let area = (y2 as i64 - y1 as i64) * (points[i].0 as i64 - x1 as i64);
// 检查矩形内部是否无其他点
if y2_idx - y1_idx <= 1 || seg.query_range(y1_idx + 1, y2_idx - 1) < x1 {
ans = ans.max(area);
}
}
}

// 将当前点加入线段树
seg.update(y1_idx, points[i].0);
}

ans
}
}
```

关键点说明

要点 说明
离散化 用 `HashMap` 将 y 坐标映射到 0m-1 的索引
线段树 迭代式实现(数组下标从 n 开始),维护每个 y 上已处理点的最大 x
扫描顺序 按 x 排序后从小到大扫描,保证已处理点都在当前点左侧
面积类型 使用 `i64` 避免乘法溢出
矩形验证 `query_range(y1+1, y2-1) < x1` 确保内部无点

复杂度

- 时间:O(n \log n)(排序 + 线段树操作)
- 空间:O(n)(离散化 + 线段树)

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/26 11:54:41

大模型幻觉防控四步法:从提示工程到人机协同实战指南

1. 项目概述&#xff1a;当大模型开始“信口开河”&#xff0c;我们到底在跟什么打交道&#xff1f;你有没有过这种经历&#xff1a;让ChatGPT帮你查一个具体年份的GDP数据&#xff0c;它张口就来“2023年全球GDP为128.7万亿美元”&#xff0c;语气笃定得像刚从央行发布会现场走…

作者头像 李华
网站建设 2026/6/26 11:48:46

YOLO 部署到边缘设备:从 .pt 到 ONNX/TensorRT 全链路实战

核心摘要 在边缘计算场景中&#xff0c;将 YOLO 模型从 PyTorch .pt 格式转化为生产级推理引擎&#xff0c;是打通算法与落地的“最后一公里”。本文以 YOLOv8/v11 为例&#xff0c;完整拆解 ONNX Runtime&#xff08;通用跨平台&#xff09; 与 TensorRT&#xff08;NVIDIA Je…

作者头像 李华
网站建设 2026/6/26 11:44:58

GTA5线上小助手:3步轻松解锁终极游戏体验的完整指南

GTA5线上小助手&#xff1a;3步轻松解锁终极游戏体验的完整指南 【免费下载链接】GTA5OnlineTools GTA5线上小助手 项目地址: https://gitcode.com/gh_mirrors/gt/GTA5OnlineTools 你是否厌倦了在GTA5线上模式中重复刷任务&#xff1f;是否想要个性化角色外观却受限于游…

作者头像 李华
网站建设 2026/6/26 11:42:27

黑色星期五折扣汇总:一个帮你省钱的开源项目

文章目录黑色星期五折扣汇总&#xff1a;一个帮你省钱的开源项目项目里都有什么为什么这个项目有用实际使用体验适合什么人用项目的技术实现总结黑色星期五折扣汇总&#xff1a;一个帮你省钱的开源项目 每年黑色星期五&#xff0c;各种软件折扣满天飞&#xff0c;但一个一个去…

作者头像 李华
网站建设 2026/6/26 11:38:44

从单核到多核异构:解析高性能嵌入式处理器架构与P5系列开发实战

1. 从“单核独舞”到“多核交响”&#xff1a;高性能嵌入式处理器的演进与P5系列的定位在嵌入式系统领域&#xff0c;尤其是网络通信、工业控制和航空航天这些对性能和可靠性有着极致要求的场景里&#xff0c;处理器的选择往往决定了整个系统的天花板。十几年前&#xff0c;我们…

作者头像 李华
网站建设 2026/6/26 11:37:12

基于DPAA的USDPAA IPSecfwd:嵌入式Linux高性能IPSec转发实践

1. 项目概述&#xff1a;当DPAA遇上IPSec&#xff0c;一次高性能转发的深度实践 在嵌入式网络设备开发领域&#xff0c;性能与安全的平衡一直是个核心挑战。尤其是在需要处理大量IPSec加密流量的网关、防火墙或边缘路由器上&#xff0c;传统的纯软件IPSec处理方案很容易成为性能…

作者头像 李华