สมมุติว่าเรามี 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