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

相关文章