समस्या विवरण
मान लीजिए हमारे पास 2D तल पर n बिंदु हैं, हमें जांचना है कि क्या y-अक्ष के समानांतर कोई रेखा है जो दिए गए बिंदुओं को सममित रूप से प्रतिबिंबित करती है, दूसरे शब्दों में, जांचें कि क्या कोई ऐसी रेखा मौजूद है जो सभी बिंदुओं को दी गई रेखा पर प्रतिबिंबित करने के बाद मूल बिंदुओं का समुच्चय प्रतिबिंबित बिंदुओं के समान ही रहता है।
उदाहरण के लिए, यदि इनपुट points = [[1,1],[-1,1]] है:

तो आउटपुट true होगा।
समाधान दृष्टिकोण
मध्य रेखा की गणना करके सेट-आधारित दृष्टिकोण:
- एक सेट ok परिभाषित करें
- n := points का आकार
- minVal := अनंत, maxVal := -अनंत
- प्रत्येक बिंदु के लिए:
- minVal := min(minVal, points[i][0])
- maxVal := max(maxVal, points[i][0])
- points[i] को ok में डालें
- mid := maxVal + minVal
- प्रत्येक बिंदु के लिए:
- x := points[i][0], y := points[i][1]
- x := mid - x
- यदि {x, y} ok में नहीं है, तो false लौटाएं
- true लौटाएं
C++ कार्यान्वयन
#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;
}
};
int main(){
Solution ob;
vector<vector<int>> v = {{1,1},{-1,1}};
cout << (ob.isReflected(v));
return 0;
}
इनपुट
{{1,1},{-1,1}}
आउटपुट
1