直线镜像
难度:
标签:
题目描述
代码结果
运行时间: 37 ms, 内存: 20.2 MB
/*
* 题目编号: 356
* 题目: 直线镜像
* 题目思路:
* 给定一些点 (x, y),需要确定是否存在一条垂直于 y 轴的直线,使得这些点关于这条直线是对称的。
* 具体做法如下:
* 1. 使用一个集合记录每个点的坐标。
* 2. 计算所有点的最小和最大 x 坐标,计算它们的平均值 mid_x。
* 3. 对于每个点 (x, y),检查其关于 mid_x 的对称点 (2 * mid_x - x, y) 是否也在集合中。
*/
import java.util.Set;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
public class Solution {
public boolean isReflected(int[][] points) {
if (points == null || points.length == 0) return true;
Set<String> pointSet = IntStream.range(0, points.length)
.mapToObj(i -> points[i][0] + "," + points[i][1])
.collect(Collectors.toSet());
int minX = IntStream.range(0, points.length)
.map(i -> points[i][0])
.min()
.getAsInt();
int maxX = IntStream.range(0, points.length)
.map(i -> points[i][0])
.max()
.getAsInt();
double midX = (double)(minX + maxX) / 2;
return IntStream.range(0, points.length)
.allMatch(i -> pointSet.contains((int)(2 * midX - points[i][0]) + "," + points[i][1]));
}
}
解释
方法:
此题解的思路是通过找到所有给定点集的最左和最右的x坐标值,然后计算这两个x值的中点作为可能的对称轴。之后,遍历每一个点,检查其关于中点的对称点是否存在于点集中。如果所有点都符合这一条件,说明点集关于该中线对称;如果任一点的对称点不存在,则不对称。
时间复杂度:
O(n)
空间复杂度:
O(n)
代码细节讲解
🦆
题解计算对称轴的方法是找到最左和最右的x坐标的中点。在点集非常大的情况下,这种方法是否可能导致精度问题?如果是,如何解决?
▷🦆
题解假设了点集中所有点的y坐标对于对称性没有影响,只考虑了x坐标。实际上对于y坐标的处理是否也需要考虑,以确保完全的对称性?
▷🦆
在题解的实现中,如果点集为空,或者所有点的x坐标相同,这种特殊情况下的返回值应该是什么?代码中是否有处理这种情况?
▷🦆
如果点集中存在重复的点,题解中的方法是否还能正确判断对称性?如果不能,应该如何修改代码来处理重复点?
▷相关问题
直线上最多的点数
给你一个数组 points
,其中 points[i] = [xi, yi]
表示 X-Y 平面上的一个点。求最多有多少个点在同一条直线上。
示例 1:

输入:points = [[1,1],[2,2],[3,3]] 输出:3
示例 2:

输入:points = [[1,1],[3,2],[5,3],[4,1],[2,3],[1,4]] 输出:4
提示:
1 <= points.length <= 300
points[i].length == 2
-104 <= xi, yi <= 104
points
中的所有点 互不相同
回旋镖的数量
给定平面上 n
对 互不相同 的点 points
,其中 points[i] = [xi, yi]
。回旋镖 是由点 (i, j, k)
表示的元组 ,其中 i
和 j
之间的欧式距离和 i
和 k
之间的欧式距离相等(需要考虑元组的顺序)。
返回平面上所有回旋镖的数量。
示例 1:
输入:points = [[0,0],[1,0],[2,0]] 输出:2 解释:两个回旋镖为 [[1,0],[0,0],[2,0]] 和 [[1,0],[2,0],[0,0]]
示例 2:
输入:points = [[1,1],[2,2],[3,3]] 输出:2
示例 3:
输入:points = [[1,1]] 输出:0
提示:
n == points.length
1 <= n <= 500
points[i].length == 2
-104 <= xi, yi <= 104
- 所有点都 互不相同