news 2026/6/26 21:06:57

力扣算法题:平分正方形(算法小白每日一题)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
力扣算法题:平分正方形(算法小白每日一题)

题号:面试题16.13 平分正方形

题目内容:

给定两个正方形及一个二维平面。请找出将这两个正方形分割成两半的一条直线。假设正方形顶边和底边与 x 轴平行。

每个正方形的数据square包含3个数值,正方形的左下顶点坐标[X,Y] = [square[0],square[1]],以及正方形的边长square[2]。所求直线穿过两个正方形会形成4个交点,请返回4个交点形成线段的两端点坐标(两个端点即为4个交点中距离最远的2个点,这2个点所连成的线段一定会穿过另外2个交点)。2个端点坐标[X1,Y1][X2,Y2]的返回格式为{X1,Y1,X2,Y2},要求若X1 != X2,需保证X1 < X2,否则需保证Y1 <= Y2

若同时有多条直线满足要求,则选择斜率最大的一条计算并返回(与Y轴平行的直线视为斜率无穷大)。

示例:

输入:square1 = {-1, -1, 2} square2 = {0, -1, 2}输出:{-1,0,2,0}解释:直线 y = 0 能将两个正方形同时分为等面积的两部分,返回的两线段端点为[-1,0]和[2,0]

解题过程及思路:

第一眼看到题目一脸懵,想了五分钟没思路,看了下提示后豁然开朗,这套题基本上是纯粹的数学题,利用高中的知识求解。

由题意得,所求的直线平分两个正方形,而平分正方形的直线一定过正方形的中点,所以题目可以转化为求过两个正方形中点的直线与两个正方形的交点(取最远的两个)。分情况讨论如下:

设中点的坐标分别为:C1(x1, y1),C2(x2, y2),则直线坐标可以表示为:

1、若两正方形中点的X轴坐标相等,则平分线为垂直于X轴的直线(这种情况包含了两中点重合的情况,因为题目要求如果有多条直线满足要求,则选择斜率最大的一条)。

2、若两正方形中点的X轴坐标不相等,则需按直线的斜率考虑:

a. 直线斜率的绝对值大于1时,此时情况如图:

此时交点的Y坐标已知,X坐标未知。

b. 直线斜率的绝对值小于1时,此时情况如图:

此时交点的X坐标已知,Y坐标未知。

c. 直线斜率的绝对值恰好等于1时,可以在上述两种斜率中任选一种即可。

使用python编写代码如下:

代码基本上算纯数学语言转化过来,较为繁琐,仅提供一个思路,可以找找其他大佬的代码,或者用ai生成更简介的代码实现。

def cut_squares(self, square1: List[int], square2: List[int]) -> List[float]: # 先求两个正方形的中心点,因为平分正方形的直线一定过其中心。 square1_center = [float(square1[0]) + float(square1[2]) / 2, float(square1[1]) + float(square1[2] / 2)] square2_center = [float(square2[0]) + float(square2[2]) / 2, float(square2[1]) + float(square2[2] / 2)] # 如果两个正方形X轴坐标相等,则其斜率最大的平分线为垂直与Y轴的直线 if square1_center[0] == square2_center[0]: lower_x = square1_center[0] lower_y = min(square1[1], square2[1]) higher_x = square1_center[0] higher_y = max(square1[1] + square1[2], square2[1] + square2[2]) result = [lower_x, lower_y, higher_x, higher_y] return result # 如果平分线不垂直y轴,则需要求连接两点的直线 k = ((square1_center[1] - square2_center[1]) / (square1_center[0] - square2_center[0])) # 斜率的绝对值大于1时 if k ** 2 >= 1: y1 = min(square1[1], square2[1]) x1 = (y1 - square1_center[1])*(square1_center[0] - square2_center[0])/(square1_center[1] - square2_center[1]) + square1_center[0] y2 = max(square1[1] + square1[2], square2[1] + square2[2]) x2 = (y2 - square1_center[1])*(square1_center[0] - square2_center[0])/(square1_center[1] - square2_center[1]) + square1_center[0] # 需要判断斜率的正负 if k > 0: result = [x1, y1, x2, y2] return result else: result = [x2, y2, x1, y1,] return result #斜率的绝对值小于1时 else: lower_x = min(square1[0], square2[0]) lower_y = (lower_x - square1_center[0])*(square1_center[1] - square2_center[1])/(square1_center[0] - square2_center[0]) + square1_center[1] higher_x = max(square1[0] + square1[2], square2[0] + square2[2]) higher_y = (higher_x - square1_center[0])*(square1_center[1] - square2_center[1])/(square1_center[0] - square2_center[0]) + square1_center[1] result = [lower_x, lower_y, higher_x, higher_y] return result

关注我,从零开始的算法小白之路。

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

DLSS Swapper终极指南:三步掌握游戏性能优化的秘密武器

DLSS Swapper终极指南&#xff1a;三步掌握游戏性能优化的秘密武器 【免费下载链接】dlss-swapper 项目地址: https://gitcode.com/GitHub_Trending/dl/dlss-swapper DLSS Swapper是一款革命性的游戏性能优化工具&#xff0c;专为PC游戏玩家设计&#xff0c;让你轻松管…

作者头像 李华
网站建设 2026/6/26 21:02:33

多模态 RAG 技术深度解析:从视觉文档检索到跨模态知识增强的全栈架构与实践

多模态 RAG 技术深度解析:从视觉文档检索到跨模态知识增强的全栈架构与实践 目录 前言 技术背景与演进逻辑 核心原理深度解析 核心模块与架构详解 技术优缺点与适用场景 实战落地 全文总结 系列说明 专栏推荐 参考资料 前言 核心痛点:企业非结构化数据中,图表、扫描件、示意…

作者头像 李华
网站建设 2026/6/26 20:59:52

3种场景下的本地Cookie安全导出解决方案:企业级隐私保护实践

3种场景下的本地Cookie安全导出解决方案&#xff1a;企业级隐私保护实践 【免费下载链接】Get-cookies.txt-LOCALLY Get cookies.txt, NEVER send information outside. 项目地址: https://gitcode.com/gh_mirrors/ge/Get-cookies.txt-LOCALLY 在数字化工作流程中&#…

作者头像 李华
网站建设 2026/6/26 20:55:20

3步搞定QQ空间完整备份:-\GetQzoneÿÿ历史数据抓取全指南

3步搞定QQ空间完整备份&#xff1a;-\GetQzone历史数据抓取全指南 【免费下载链接】GetQzonehistory 获取QQ空间发布的历史说说 项目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 你是否曾担心QQ空间的珍贵记忆会随着时间流逝而消失&#xff1f;那些记…

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

目前靠谱的AI智能体网站哪家可靠

说实话&#xff0c;这问题我今年被问了不下三十遍。不是不想回答&#xff0c;而是这行变化太快——三个月前觉得好用的平台&#xff0c;今儿可能连影子都找不着了。我自己从五年前就开始折腾AI智能体&#xff0c;从最早的机械式对话到现在的多模态交互&#xff0c;踩过太多坑。…

作者头像 李华