程序员面试金典 - 面试题 16.13. 平分正方形(数学)

1. 题目

给定两个正方形及一个二维平面。请找出将这两个正方形分割成两半的一条直线。
假设正方形顶边和底边与 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]提示:
square.length == 3
square[2] > 0

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/bisect-squares-lcci
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

  • 过两个正方形中心的直线
  • 分成斜率无穷大(垂直于x轴)、斜率绝对值>=1、< 1 考虑
  • 交点在上下边,还是在左右边
class Solution {
public:vector<double> cutSquares(vector<int>& square1, vector<int>& square2) {if(square1[1] > square2[1])swap(square1,square2);//第一个的左下角y坐标更小double cx1, cy1, cx2, cy2, r1, r2;r1 = square1[2]/2.0;r2 = square2[2]/2.0;cx1 = square1[0]+r1;//中心坐标cy1 = square1[1]+r1;cx2 = square2[0]+r2;cy2 = square2[1]+r2;if(cx1==cx2)//斜率无穷大return {cx1,cy1-r1,cx1,max(cy1+r1,cy2+r2)};else//斜率存在,分两种情况,与上下边相交,左右边相交{double k = (cy1-cy2)/(cx1-cx2);double b = cy1-k*cx1;vector<vector<double>> points;if(abs(k)>=1)//交点在上下边{points.push_back({(cy1+r1-b)/k, cy1+r1});points.push_back({(cy1-r1-b)/k, cy1-r1});points.push_back({(cy2+r2-b)/k, cy2+r2});points.push_back({(cy2-r2-b)/k, cy2-r2});sort(points.begin(),points.end());return {points.front()[0],points.front()[1],points.back()[0],points.back()[1]};}else//交点在左右边{points.push_back({cx1+r1, k*(cx1+r1)+b});points.push_back({cx1-r1, k*(cx1-r1)+b});points.push_back({cx2+r2, k*(cx2+r2)+b});points.push_back({cx2-r2, k*(cx2-r2)+b});sort(points.begin(),points.end());return {points.front()[0],points.front()[1],points.back()[0],points.back()[1]};}}}
};

4 ms 8.6 MB

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/476602.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

吵翻了!确认录取后导师和学生“互放鸽子”,网友:线上选拔太混乱

源 | 募格学术参考 | 中国科学报、科学网博客、知乎等导师和学生互相“放鸽子”是种怎样的体验&#xff1f;近日&#xff0c;《中国科学报》的一篇文章揭露了疫情下线上推免选拔的乱象。因为某些原因&#xff0c;产生了一些所谓“海王院校”&#xff08;指在夏令营或预推免中&a…

监控和剖析数据库操作P6Spy,SQL Profiler,SQL 使用简介

新一篇: 关于java类的动态装载 几乎 80% - 85% 的数据库性能问题是由于应用数据库的设计或者应用程序本身的代码所引起的。因此良好的事务处理能力需要在设计应用程序的时候&#xff0c;在设计数据库的时候就考虑到性能和伸缩性。 ---- DB2 Magazine 在我们 Java 开发应用程序的…

python新手练习项目_适合Python 新手的5大练手项目,你练了么?

已经学习了一段时间的Python&#xff0c;如果你看过之前W3Cschool的文章&#xff0c;就知道是时候该进去【项目】阶段了。 但是在练手项目的选择上&#xff0c;还存在疑问&#xff1f;不知道要从哪种项目先下手&#xff1f; W3Cschool首先有两点建议&#xff1a; 最好不要写太应…

LeetCode 866. 回文素数(除11外,偶数位的回文数都不是质数)

1. 题目 求出大于或等于 N 的最小回文素数。 回顾一下&#xff0c;如果一个数大于 1&#xff0c;且其因数只有 1 和它自身&#xff0c;那么这个数是素数。 例如&#xff0c;2&#xff0c;3&#xff0c;5&#xff0c;7&#xff0c;11 以及 13 是素数。 回顾一下&#xff0c;…

首个在ImageNet上精度超过80%的二值神经网络BNext问世,-1与+1的五年辛路历程

源 | 机器之心两年前&#xff0c;当 MeliusNet 问世时&#xff0c;机器之心曾发表过一篇技术文章《第一次胜过 MobileNet 的二值神经网络&#xff0c;-1 与 1 的三年艰苦跋涉》&#xff0c;回顾了 BNN 的发展历程。彼时&#xff0c;依靠早期 BNN 工作 XNOR-Net 起家的 XNOR.AI…

中countif函数_countif与countifs:单条件与多条件计数适用场景

countif&#xff08;&#xff09;的语法图丑~~图丑~~见谅~~Countif函数&#xff1a;对指定区域中符合指定条件的单元格计数。该函数的语法规则如下:countif(range&#xff0c;criteria)参数:range 要计算其中非空单元格数目的区域参数:criteria 以数字、表达式或文本形式定义的…

极大似然模型1

first_step.m%clear; syms rou fai2 k1 k2 k3 n rorn ii clc; ninput(观测时刻数 n); disp( dealing ); disp(Just wait for a few minutes............); k1sym((1-rou*rou)*(1-fai2*fai2)*Xmn(rorn,1)*Xmn(rorn,1)); k2sym((1-fai2^2)*(Xmn…

LeetCode 1177. 构建回文串检测(前缀和)

1. 题目 给你一个字符串 s&#xff0c;请你对 s 的子串进行检测。 每次检测&#xff0c;待检子串都可以表示为 queries[i] [left, right, k]。我们可以 重新排列 子串 s[left], ..., s[right]&#xff0c;并从中选择 最多 k 项替换成任何小写英文字母。 如果在上述检测过程…

张俊林:ChatGPT会成为下一代搜索引擎吗

文|张俊林知乎本文将从以下几个方面展开&#xff1a;引言ChatGPT的技术原理ChatGPT能否取代Google、百度等传统搜索引擎引言作为智能对话系统&#xff0c;ChatGPT最近两天爆火&#xff0c;都火出技术圈了&#xff0c;网上到处都在转ChatGPT相关的内容和测试例子&#xff0c;效果…

k8s dashboard_k8s集群部署Dashboard

部署Dashboard&#xff08;Web UI&#xff09;* dashboard-deployment.yaml // 部署Pod&#xff0c;提供Web服务 * dashboard-rbac.yaml // 授权访问apiserver获取信息 * dashboard-service.yaml // 发布服务&#xff0c;提供对外访问 ​…

.Net笔试题 有答案

在对SQL Server 数据库操作时应选用&#xff08;a&#xff09;。 a)SQL Server .NET Framework 数据提供程序&#xff1b; b)OLE DB .NET Framework 数据提供程序&#xff1b; c)ODBC .NET Framework 数据提供程序&#xff1b; d)Oracle .NET Framework数据提供程序&#x…

程序员面试金典 - 面试题 17.13. 恢复空格(DP+Trie树)

文章目录1. 题目2. 解题2.1 动态规划2.2 Trie树1. 题目 哦&#xff0c;不&#xff01;你不小心把一个长篇文章中的空格、标点都删掉了&#xff0c;并且大写也弄成了小写。 像句子"I reset the computer. It still didn’t boot!"已经变成了"iresetthecomputeri…

2022的结尾,对话系统起飞了

文 | 郑楚杰知乎编者记&#xff1a;近日来&#xff0c;ChatGPT的连续刷屏让人们重新看到了AI的希望&#xff0c;编者通过对ChatGPT的试用&#xff0c;发现其对话能力早已不同于两年前的对话系统了&#xff0c;可以说&#xff0c;有了质的飞跃&#xff0c;向着用户体验奇点迈进了…

python清除列表内容_Python 列表的清空方式

情况列表的操作&#xff1a; del list[:] list[] list[:][] def func(L): L.append(1) print L #L[:][] #del L[:] L [] print L L[] func(L) print L 输出结果&#xff1a; [1] [] [1] 分析&#xff1a;L是可变数据类型&#xff0c;L作为参数&#xff0c;函数内对L的改变&…

ASP.NET小收集:Word的编码是Unicode

Word的编码是Unicode&#xff0c;从Word连接的超链接会附带Unicode编码进行打开&#xff0c;所以&#xff0c;如果没有对链接页面设定编码&#xff0c;将出现乱码&#xff0c;解决方法之一&#xff1a;设置编码为UTF-8<meta http-equiv"Content-Type" content&quo…

程序员面试金典 - 面试题 05.08. 绘制直线(位运算)

1. 题目 绘制直线。有个单色屏幕存储在一个一维数组中&#xff0c;使得32个连续像素可以存放在一个 int 里。 屏幕宽度为w&#xff0c;且w可被32整除&#xff08;即一个 int 不会分布在两行上&#xff09;&#xff0c;屏幕高度可由数组长度及屏幕宽度推算得出。 请实现一个函数…

FarPoint Spread For .Net 4.0

FarPoint Spread For .Net 4.0 ftp://ftp.fpoint.com/Trials/SpreadWinForm/spwin.zip http://www.fpoint.com:8080/files/Trials/SpreadWinForm/spwinframework35.zip 转载于:https://www.cnblogs.com/Tonyyang/archive/2008/06/23/1228133.html

入职比你晚,薪资比你高,礼貌吗

文&#xff5c; 穆胜咨询研究院源&#xff5c; 穆胜咨询秋招已过&#xff0c;企业迎来了许多新的面孔&#xff0c;对于很多老员工来说却是五味杂陈。新人空降拿到高工资&#xff0c;而自己的资历却换不来期待幅度的涨薪。“新老员工薪资倒挂”的问题&#xff0c;本就是HR的一道…

乐学python_【IT专家】铁乐学python

铁乐学 python 2018/04/18 13 铁乐学 python_day23_ 面向对象进阶 1_ 反射 以下内容大部分摘自博客 cnblogs/Eva-J/ isinstance() 和 issubclass() 两者的返回值都是布尔值 isinstance() 能够检测到继承关系 type() 只能单纯的判 断类 isinstance() 判断一个对象和一个类有没有…

程序员面试金典 - 面试题 16.14. 最佳直线(哈希map+set)

1. 题目 给定一个二维平面及平面上的 N 个点列表Points&#xff0c;其中第i个点的坐标为Points[i][Xi,Yi]。 请找出一条直线&#xff0c;其通过的点的数目最多。 设穿过最多点的直线所穿过的全部点编号从小到大排序的列表为S&#xff0c;你仅需返回[S[0],S[1]]作为答案 若有多…