Leetcode 3464. Maximize the Distance Between Points on a Square

news/2025/2/24 20:31:12
  • Leetcode 3464. Maximize the Distance Between Points on a Square
    • 1. 解题思路
    • 2. 代码实现
  • 题目链接:3464. Maximize the Distance Between Points on a Square

1. 解题思路

说来惭愧,这道题我也没有自力搞定,也是问了一下DeepSeek R1之后搞明白的解法,感觉真的被LLM完爆了……

不过,也不知道是不是错觉,总觉得DeepSeek发布之后,Leetcode每周hard的题目都变得难了好多,以前基本都能搞定,最近感觉卡壳的几率好高……

这道题核心思路还是二分法求临界值,因此我们事实上要做的就是在已知目标距离 d d d的情况下判断能否从给定的 n n n个点当中找出 k k k个点,使得其两两的曼哈顿距离的最小值均不小于 d d d

然后我就卡在这里了,完全没啥好的思路,但是DeepSeek R1搞定了。

它的思路的话其实还是挺简单的,就是先将所有的点的坐标改写为一个标量值然后进行排列,并确保任意两个点之间的曼哈顿距离就是这两个标量的差,由此,我们即可以通过二分法快速地查找得到当一个点被取用是其下一个可取用的点,且保证该取法下任意两个点之间的距离均不小于 d d d

但这里的问题就在于说如何进行这个排序的过程,DeepSeek给出的方法是使用周长的方式,即从坐标点 ( 0 , 0 ) (0,0) (0,0)开始顺时针延正方形绕一圈,任意点的坐标就是其到原点 ( 0 , 0 ) (0, 0) (0,0)的距离。

需要注意的是,在这种情况下,上述描述,即任意两点的曼哈顿距离就是其坐标的差这个表述事实上并不总是满足,当两个点分别位于平行的两条对边上时是不成立的,但是因为 k ≥ 4 k \geq 4 k4,因此事实上我们的距离上限总是小于等于边长 s s s的,因此我们事实上只需要保证临边上的两点的距离计算正确即可,而这是可以保证的。

另外还要注意的是,考察靠后的点作为第一个取用的点时,我们需要回过头来考察头部点,因此我们需要绕两圈来成环,且需要保证我们最终取出来的 k k k个点的跨度在 4 s − d 4s-d 4sd范围内,不然最后两个点的距离同样会小于 d d d

2. 代码实现

给出最终的python代码实现如下:

class Solution:
    def maxDistance(self, side: int, points: List[List[int]], k: int) -> int:
            # 转换每个点到周长坐标
            sorted_p = []
            for x, y in points:
                if x == 0:
                    coord = y
                elif y == side:
                    coord = side + x
                elif x == side:
                    coord = 3 * side - y
                else:  # y == 0
                    coord = 3 * side + (side - x)
                sorted_p.append(coord)
            sorted_p.sort()
            n = len(sorted_p)

            def is_possible(d):
                if d == 0:
                    return True
                # 扩展数组以处理环形问题
                extended_p = sorted_p + [p + 4 * side for p in sorted_p]
                # 遍历每个可能的起点
                for i in range(n):
                    current = i
                    count = 1
                    for _ in range(k - 1):
                        target = extended_p[current] + d
                        # 查找下一个点的位置
                        j = bisect.bisect_left(extended_p, target, current + 1)
                        if j >= len(extended_p):
                            break
                        current = j
                        count += 1
                    if count >= k:
                        # 计算跨度
                        span = extended_p[current] - extended_p[i]
                        if span <= 4 * side - d:
                            return True
                return False

            # 二分查找
            low = 0
            high = side + 1
            ans = 0
            while low < high-1:
                mid = (low + high) // 2
                if is_possible(mid):
                    low = mid
                else:
                    high = mid
            return low

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


http://www.niftyadmin.cn/n/5864795.html

相关文章

模型思维 - 领域模型的应用与解析

文章目录 引言模型的核心作用与价值四大模型类型UML建模工具UML类图的核心价值类关系深度剖析企业级建模实践 领域模型&#xff08;推荐&#xff09; vs 数据模型&#xff08;不推荐&#xff09;区别联系错把领域模型当数据模型错误方案 vs 正确方案对比正确方案的实现1. 数据库…

苍穹外卖中的模块总结

本文总结苍穹外卖项目中可复用的通用设计 sky-common constant存放常量类&#xff0c;包括消息常量&#xff0c;状态常量 context是上下文对象&#xff0c;封装了threadlocal package com.sky.context;public class BaseContext {public static ThreadLocal<Long> thre…

毕业项目推荐:基于yolov8/yolov5/yolo11的番茄成熟度检测识别系统(python+卷积神经网络)

文章目录 概要一、整体资源介绍技术要点功能展示&#xff1a;功能1 支持单张图片识别功能2 支持遍历文件夹识别功能3 支持识别视频文件功能4 支持摄像头识别功能5 支持结果文件导出&#xff08;xls格式&#xff09;功能6 支持切换检测到的目标查看 二、数据集三、算法介绍1. YO…

k8s部署针对外部服务器的prometheus服务

在Kubernetes(K8s)集群中部署Prometheus以监控外部服务器&#xff0c;涉及到几个关键步骤&#xff1a;配置Prometheus以抓取远程目标、设置服务发现机制、以及确保网络可达性。下面是一个详细指南&#xff0c;指导您如何在Kubernetes中部署并配置Prometheus&#xff0c;以便有效…

Python的子线程与主线程之间的通信并通知主线程更新UI

新建PLC类 PLC.py import json import time from threading import Threadfrom HslCommunication import SiemensS7Net, SiemensPLCS from PySide6.QtCore import QThread, Signal, QObjectfrom tdm.MsgType import MSG_TYPE_LOG, MSG_TYPE_MSGBOX# 自定义信号类&#xff0c;用…

ElasticSearch查询指南:从青铜到王者的骚操作

ElasticSearch查询指南&#xff1a;从青铜到王者的骚操作 本文来源于笔者的CSDN原创&#xff0c;由于掘金>已经去掉了转载功能&#xff0c;所以只好重新上传&#xff0c;以下图片依然保持最初发布的水印&#xff08;如CSDN水印&#xff09;。&#xff08;以后属于本人原创均…

vue-fastapi-admin 部署心得

vue-fastapi-admin 部署心得 这两天需要搭建一个后台管理系统&#xff0c;找来找去 vue-fastapi-admin 这个开源后台管理框架刚好和我的技术栈所契合。于是就浅浅的研究了一下。 主要是记录如何基于原项目提供的Dockerfile进行调整&#xff0c;那项目文件放在容器外部&#xf…

基于Spring Boot的公司资产网站设计与实现(LW+源码+讲解)

专注于大学生项目实战开发,讲解,毕业答疑辅导&#xff0c;欢迎高校老师/同行前辈交流合作✌。 技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;…