Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class Solution {
- public:
- int minAreaRect(vector<vector<int>>& points) {
- map<int, vector<int>> pts;
- int area = INT_MAX;
- vector<int> xvec;
- int min_y = INT_MAX;
- int min_x = INT_MAX;
- int x1, x2;
- for(int i = 0; i < points.size(); i++)
- {
- pts[points[i][0]].push_back(points[i][1]);
- }
- for(auto it = pts.begin(); it != pts.end(); it++)
- {
- if(it->second.size() > 1)
- {
- xvec.push_back(it->first);
- }
- }
- sort(xvec.begin(), xvec.end());
- for(auto i = 1; i < xvec.size(); i++)
- {
- if(abs(xvec[i] - xvec[i - 1]) <= min_x)
- {
- x1 = xvec[i - 1];
- x2 = xvec[i];
- int p = 0, q = 0;
- min_x = abs(xvec[i] - xvec[i - 1]);
- sort(pts[x1].begin(), pts[x1].end());
- sort(pts[x2].begin(), pts[x2].end());
- while(p < pts[x1].size() && q < pts[x2].size())
- {
- if(pts[x1][p] == pts[x2][q])
- {
- if(p > 0 && q > 0)
- if(pts[x1][p] == pts[x2][q] &&
- pts[x1][p - 1] == pts[x2][q - 1])
- min_y = min(min_y, abs(pts[x1][p] - pts[x1][p - 1]));
- p++;
- q++;
- }
- else
- {
- if( pts[x1][p] < pts[x2][q])
- p++;
- else q++;
- }
- }
- if(min_x != INT_MAX && min_y != INT_MAX)
- area = min(area, min_x * min_y);
- }
- }
- if(area == INT_MAX) return 0;
- return area;
- }
- };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement