订阅更新

任意两点组成的矩形面积

SQL 实战 123 题 · 第 112 题 中等 约 2 分钟读完

LeetCode 1459 · 自连接、去重配对、排除退化情况

本文目录
  1. 面试怎么回答
  2. 题意
  3. 表结构
  4. 思路
  5. 参考解法
  6. 易错点

面试怎么回答

自连接 a.id < b.id,面积 = ABS(a.x - b.x) * ABS(a.y - b.y),过滤掉 x 或 y 相同的点对,按面积降序、p1、p2 升序排序。用小于号而不是不等号配对,既去重又满足 p1 < p2。

先把这段讲顺;面试官追问时,再展开下面的原理和细节。

详细讲解

题意

点表记录每个点的坐标。任意两点作为矩形的对角顶点,计算矩形面积;面积为 0(两点同一行或同一列)的不要;结果中 p1 < p2,按面积降序、再按 p1、p2 升序。

表结构

  • Points:id(主键)、x_value、y_value

思路

两两配对用自连接,a.id < b.id 保证每对只出现一次且满足 p1 < p2。面积是横纵坐标差的绝对值相乘,x 或 y 相同时面积为 0,要排除。

参考解法

select a.id P1,b.id P2,abs(a.x_value-b.x_value)*abs(a.y_value-b.y_value) as area
from Points a,Points b
where a.id<b.id and a.x_value != b.x_value and a.y_value != b.y_value
order by area desc,P1 ,P2

易错点

  • 用 a.id != b.id 每对会出现两次。
  • 面积为 0 的点对也要排除,题目只要真正能构成矩形的。
刷题进度保存在当前浏览器