news 2026/7/5 14:01:20

Kimi LeetCode 3464. 正方形上的点之间的最大距离 Python3实现

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Kimi LeetCode 3464. 正方形上的点之间的最大距离 Python3实现

LeetCode 3464. 正方形上的点之间的最大距离 — Python3 实现

题目概述

给定正方形边长 `side`,以及位于正方形边界上的若干点。需要从中选出 `k` 个点,使得任意两点之间的最小曼哈顿距离最大化。

- 曼哈顿距离:`|x1 - x2| + |y1 - y2|`
- 关键约束:`k <= 25`,`points.length <= 15000`

核心思路

这是一个经典的 "最大化最小值" 问题,标准解法是二分答案 + 可行性检验。

关键观察

1. 答案上界为 `side`:因为 `k >= 4`,至少有两个点在同一条边上或相邻边上,而同一/相邻边上的点距离最大为 `side`(当 `k=4` 时选四个角,最小距离恰好为 `side`)。

2. 展开为正方形周长:将正方形边界展开为一维环形数组(周长 `4 * side`),按顺时针顺序排列所有点。这样相邻点之间的距离可以用曼哈顿距离表示。

展开映射规则:
- 左边 `x=0`:`d = y`
- 上边 `y=side`:`d = side + x`
- 右边 `x=side`:`d = 3 * side - y`
- 下边 `y=0`:`d = 4 * side - x`

3. 可行性检验:对于候选距离 `limit`,检查是否能选出 `k` 个点,使得相邻点(包括首尾环绕)的曼哈顿距离都 `>= limit`。由于 `k <= 25`,可以枚举每个点作为起点,贪心选择下一个满足距离要求的点。

Python3 实现

```python
import bisect
from typing import List

class Solution:
def maxDistance(self, side: int, points: List[List[int]], k: int) -> int:
"""
二分答案 + 贪心可行性检验
将正方形边界展开为一维环形数组
"""
n = len(points)
positions = []

# 将边界点展开为一维坐标(顺时针方向)
for x, y in points:
if x == 0:
# 左边:从 (0,0) 向上到 (0, side)
d = y
elif y == side:
# 上边:从 (0, side) 向右到 (side, side)
d = side + x
elif x == side:
# 右边:从 (side, side) 向下到 (side, 0)
d = 3 * side - y
else:
# 下边:从 (side, 0) 向左到 (0, 0)
d = 4 * side - x
positions.append(d)

positions.sort()
perimeter = 4 * side

def can_pick(limit: int) -> bool:
"""
检查是否能选出 k 个点,相邻点距离 >= limit(包括首尾环绕)
"""
# 枚举每个点作为起点
for start_idx in range(n):
start = positions[start_idx]
# 最后一个点不能超过 start + perimeter - limit(保证首尾环绕距离 >= limit)
last_allowed = start + perimeter - limit
current = start
picked = 1

for _ in range(k - 1):
# 找下一个 >= current + limit 的点
next_idx = bisect.bisect_left(positions, current + limit)

# 如果超出数组范围,或者超出 last_allowed,则失败
if next_idx >= n or positions[next_idx] > last_allowed:
break

current = positions[next_idx]
picked += 1
else:
# 成功选了 k 个点
return True

return False

# 二分搜索答案 [1, side]
left, right = 1, side
ans = 0

while left <= right:
mid = (left + right) // 2
if can_pick(mid):
ans = mid
left = mid + 1
else:
right = mid - 1

return ans
```

复杂度分析

- 时间复杂度:`O(n log n + n * k * log n * log side)`
- 排序:`O(n log n)`
- 二分答案:`O(log side)` 次
- 每次检验:枚举 `n` 个起点,每个起点贪心选 `k` 个点,每次用二分查找 `O(log n)`
- 由于 `k <= 25`,实际运行很快

- 空间复杂度:`O(n)`

示例验证

输入 输出 说明
`side=2, points=[[0,2],[2,0],[2,2],[0,0]], k=4` `2` 四个角,最小距离为 2
`side=2, points=[[0,0],[1,2],[2,0],[2,2],[2,1]], k=4` `1` 选 (0,0), (2,0), (2,2), (2,1)
`side=2, points=[[0,0],[0,1],[0,2],[1,2],[2,0],[2,2],[2,1]], k=5` `1` 选 (0,0), (0,1), (0,2), (1,2), (2,2)

注意事项

上述实现基于 展开+贪心 的经典方法。但需要注意:在展开为一维坐标后,相邻边的点之间的曼哈顿距离与一维距离的关系需要仔细处理。对于 `limit <= side` 的情况,展开方法能正确工作,因为:
- 同一边上的点:一维距离 = 曼哈顿距离
- 相邻边上的点:一维距离 = 曼哈顿距离
- 对边上的点:曼哈顿距离 >= side >= limit,不会成为瓶颈

如果追求更严谨的实现,可以参考使用 双端队列 DP 的方法(如搜索结果中的 `Sequence` 类实现),它直接在二维坐标上用滑动窗口维护最长合法子序列。

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

深度学习项目复现实战:从GitHub代码到可运行结果的系统方法论

1. 这篇文章真正要解决的问题你是否曾经在GitHub上看到一个炫酷的深度学习项目&#xff0c;论文结果令人惊艳&#xff0c;代码仓库也开源了&#xff0c;于是兴冲冲地git clone下来&#xff0c;结果在本地环境折腾了三天三夜&#xff0c;不是依赖冲突就是CUDA版本不对&#xff0…

作者头像 李华
网站建设 2026/7/5 14:01:06

35B Agent超越万亿参数模型?上海AI Lab开源Agents-A1:scaling the Horizon

不堆参数&#xff0c;也能很强。 长程&#xff08;Long-Horizon&#xff09;任务&#xff0c;是当前AI Agent亟需突破的难题之一。 在软件工程、科学研究和复杂决策等场景中&#xff0c;Agent 往往需要在长程条件下连续决策&#xff0c;任何一步失误都可能影响后续任务。过去…

作者头像 李华
网站建设 2026/7/5 13:56:27

python语法竟如此简单,str append用法你知道吗?

资深软件开发工程师&#xff0c;业余马拉松选手。于计算机而言, 存在那么一种计算机编程语言, 它和寻常我们日常所运用的自然语言是有所不一样的, 最大的区别之处在于, 自然语言于不同的语境那里有着不同的理解层面, 然而计算机会依据编程语言去执行任务, 这就必然得确保凭借编…

作者头像 李华
网站建设 2026/7/5 13:55:55

《图片添加贴纸》四、PhotoViewPicker使用指南

HarmonyOS PhotoViewPicker&#xff08;图片选择器&#xff09;使用指南 效果 一、概述 在HarmonyOS应用开发中&#xff0c;经常需要从用户相册中选择图片或视频。PhotoViewPicker 是 photoAccessHelper 模块提供的系统级图片选择器&#xff0c;具有以下优势&#xff1a; 无…

作者头像 李华
网站建设 2026/7/5 13:54:39

3PEAK思瑞浦 LM339-SO2R SOP14 比较器

特性 宽单电源电压范围或双电源:2V至40V或土1V至20V 低供电电流:每通道460uA(典型值) 传播延迟:1us 低偏置电压:4mV(最大值&#xff0c;-40C至85C) 低输入偏置电流:60nA(典型值)输入共模电压范围包含地线 内部差分输入电压范围等于供电电压 开漏输出以实现最大灵活性 低输出饱…

作者头像 李华
网站建设 2026/7/5 13:54:03

山东大学软件学院 2026 年数据库系统期末考试回忆版

ER图相比前几年要更复杂一些一、简答题 1. SQL 查询优化与语法树 给出SQL 语句&#xff0c;要求画出该查询的语法树&#xff0c;并直接给出优化后的语法树。(忘了&#xff0c;反正很简单) 2. 多值依赖 给定关系模式 R(A, B, C)&#xff0c;已知多值依赖&#xff1a; A ->>…

作者头像 李华