C++ 中的直线反射
c++server side programmingprogramming
假设我们在二维平面上有 n 个点,我们需要检查是否存在一条与 y 轴平行的直线,该直线能够对称地反射给定的点。换句话说,检查是否存在一条直线,使得所有点在经过该直线后,原始点的集合与反射点的集合相同。
因此,如果输入如下:points = [[1,1],[-1,1]]
则输出为 true
为了解决这个问题,我们将遵循以下步骤 −
定义一个集合ok
n := 点的大小
minVal := inf
maxVal := -inf
初始化 i := 0,当 i < n 时,更新(将 i 增加 1),执行 −
minVal := minVal 与 points[i, 0] 中的最小值
maxVal := maxVal 与 points[i, 0] 中的最大值
将 points[i] 插入 ok
mid := maxVal + minVal
初始化 i := 0,当 i < n,更新(将 i 加 1),执行 −
x := points[i, 0]
y := points[i, 1]
x := mid - x
如果 { x, y } 不成立,则 −
return false
return true
示例
让我们看看下面的实现以便更好地理解 −
#include <bits/stdc++.h> using namespace std; class Solution { public: bool isReflected(vector<vector<int<>& points) { set<vector<int< > ok; int n = points.size(); int minVal = INT_MAX; int maxVal = INT_MIN; for (int i = 0; i < n; i++) { minVal = min(minVal, points[i][0]); maxVal = max(maxVal, points[i][0]); ok.insert(points[i]); } int mid = maxVal + minVal; for (int i = 0; i < n; i++) { int x = points[i][0]; int y = points[i][1]; x = mid - x; if (!ok.count({ x, y })) return false; } return true; } }; main(){ Solution ob; vector<vector<int<> v = {{1,1},{-1,1}}; cout << (ob.isReflected(v)); }
输入
{{1,1},{-1,1}}
输出
1