C++中的直线反射
假设我们在 2D 平面上有 n 个点,我们需要检查是否存在一条与 y 轴平行的线可以对称反射给定点,换句话说,检查是否存在一条线,在所有点都沿给定线反射后,原始点集与反射点集相同。
因此,如果输入为 points = [[1,1],[-1,1]]

那么输出将为真
为了解决这个问题,我们将按照以下步骤操作:-
定义一个集合 ok
n := points 的大小
minVal := 无穷大
maxVal := -无穷大
对于 initialize i := 0,当 i < n,更新(使 i 增加 1),执行以下操作:-
minVal := minVal 与 points[i, 0] 的最小值
maxVal := maxVal 与 points[i, 0] 的最大值
将 points[i] 插入 ok 中
mid := maxVal + minVal
对于 initialize i := 0,当 i < n,更新(使 i 增加 1),执行以下操作:-
x := points[i, 0]
y := points[i, 1]
x := mid - x
如果 { x, y } 不在 ok 中,那么 -
返回 false
返回 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
广告
数据结构
网络
关系型数据库管理系统(RDBMS)
操作系统
Java
iOS
HTML
CSS
Android
Python
C语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP