สมมุติว่าเรามี n จุดบนระนาบ 2 มิติ เราต้องตรวจสอบว่ามีเส้นใดขนานกับแกน y ที่สะท้อนจุดที่กำหนดแบบสมมาตรหรือไม่ กล่าวคือ ตรวจสอบว่ามีเส้นตรงที่สะท้อนจุดทั้งหมดบนเส้นที่กำหนดหรือไม่ เซตของจุดเดิมจะเท่ากับจุดสะท้อน
ดังนั้น หากอินพุตเหมือนกับคะแนน =[[1,1],[-1,1]]

แล้วผลลัพธ์จะเป็นจริง
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
-
กำหนดหนึ่งชุดตกลง
-
n :=ขนาดของคะแนน
-
minVal :=inf
-
maxVal :=-inf
-
สำหรับการเริ่มต้น i :=0 เมื่อ i
-
minVal :=ขั้นต่ำของ minVal และคะแนน[i, 0]
-
maxVal :=สูงสุดของ maxVal และคะแนน[i, 0]
-
แทรกจุด[i] ลงในตกลง
-
-
กลาง :=maxVal + minVal
-
สำหรับการเริ่มต้น i :=0 เมื่อ i
-
x :=คะแนน[i, 0]
-
y :=คะแนน[i, 1]
-
x :=กลาง - x
-
ถ้า { x, y } ไม่อยู่ใน ok แล้ว −
-
คืนค่าเท็จ
-
-
-
คืนความจริง
ตัวอย่าง
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
#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