今天的签到题,却也不是一下子就能解决的,还真是让我绕了许多弯。
看到题时的想法是检验矩阵中是否包含另一个矩阵的顶点,若包含则判定重叠。但是这样的判断需要对八个点分别进行,于是开开心心砸完一吨代码。刚准备上手跑,想到了一个反例,像这样:

emm。。。光速删代码,重新考虑。
接着想,如果考虑顶点不可取的话,考虑边是否可取呢?即能不能通过判断边是否与矩形有交集来判断矩形相较呢?
嗯,有些道理。
然后刚准备一顿推,想到又是八条边的判断,我重新思考了一下,如果逆向思考会如何呢?即考虑两个矩形是否不想交。这个命题的验证似乎就变得很简单了,因为相交时,一条边同另一个矩阵的两条对边的关系可以有很多种,可是它的否定就只有一种情况,最终只需要考虑一个矩阵是否在另一个矩阵的四周即可。
例如矩形A在B的右边,那么A的左侧的边应该在B右侧边的右边。有点绕,但是不难理解。
又由于这种四周的概念是相对的,那么只需要列举上下左右四种情况即可。
代码:
class Solution {
public boolean isRectangleOverlap(int

这篇博客探讨了解决LeetCode 836问题的思路,初始尝试通过判断矩阵顶点是否包含失败,转而考虑通过边的交集来确定矩形是否重叠。作者提出反向思考,验证两个矩形是否不相交,只需检查一个矩形是否位于另一个的四周。最终实现了一个简洁的解决方案。
最低0.47元/天 解锁文章
285

被折叠的 条评论
为什么被折叠?



