2D 평면에 n개의 점이 있다고 가정하면 y축에 평행한 선이 주어진 점을 대칭적으로 반영하는지 확인해야 합니다. 즉, 주어진 선 위에 모든 점을 반사한 후 원래 점의 집합은 반영된 점과 동일합니다.
따라서 입력이 점 =[[1,1],[-1,1]]
와 같은 경우
그러면 출력이 true가 됩니다.
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
-
한 세트를 정의하십시오.
-
n :=포인트 크기
-
minVal :=inf
-
maxVal :=-inf
-
initialize i :=0의 경우, i
-
minVal :=minVal 및 포인트의 최소값[i, 0]
-
maxVal :=maxVal 및 포인트의 최대값[i, 0]
-
ok
에 점[i] 삽입
-
-
mid :=maxVal + minVal
-
initialize i :=0의 경우, i
-
x :=포인트[i, 0]
-
y :=포인트[i, 1]
-
x :=중간 - x
-
{ x, y }가 정상이 아니면 -
-
거짓을 반환
-
-
-
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