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

更新于:19-Nov-2020

402 次查看

启动你的 职业

完成课程,获得认证

开始
广告
© . All rights reserved.