Advertisement
Guest User

Untitled

a guest
Dec 5th, 2019
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.95 KB | None | 0 0
  1. class Solution {
  2. public:
  3. int minAreaRect(vector<vector<int>>& points) {
  4. map<int, vector<int>> pts;
  5. int area = INT_MAX;
  6.  
  7. vector<int> xvec;
  8. int min_y = INT_MAX;
  9. int min_x = INT_MAX;
  10. int x1, x2;
  11.  
  12. for(int i = 0; i < points.size(); i++)
  13. {
  14. pts[points[i][0]].push_back(points[i][1]);
  15. }
  16.  
  17. for(auto it = pts.begin(); it != pts.end(); it++)
  18. {
  19. if(it->second.size() > 1)
  20. {
  21. xvec.push_back(it->first);
  22. }
  23. }
  24. sort(xvec.begin(), xvec.end());
  25.  
  26. for(auto i = 1; i < xvec.size(); i++)
  27. {
  28. if(abs(xvec[i] - xvec[i - 1]) <= min_x)
  29. {
  30. x1 = xvec[i - 1];
  31. x2 = xvec[i];
  32. int p = 0, q = 0;
  33. min_x = abs(xvec[i] - xvec[i - 1]);
  34. sort(pts[x1].begin(), pts[x1].end());
  35. sort(pts[x2].begin(), pts[x2].end());
  36. while(p < pts[x1].size() && q < pts[x2].size())
  37. {
  38. if(pts[x1][p] == pts[x2][q])
  39. {
  40. if(p > 0 && q > 0)
  41. if(pts[x1][p] == pts[x2][q] &&
  42. pts[x1][p - 1] == pts[x2][q - 1])
  43. min_y = min(min_y, abs(pts[x1][p] - pts[x1][p - 1]));
  44. p++;
  45. q++;
  46. }
  47. else
  48. {
  49. if( pts[x1][p] < pts[x2][q])
  50. p++;
  51. else q++;
  52. }
  53.  
  54. }
  55. if(min_x != INT_MAX && min_y != INT_MAX)
  56. area = min(area, min_x * min_y);
  57. }
  58. }
  59. if(area == INT_MAX) return 0;
  60. return area;
  61.  
  62. }
  63. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement