【枚举】个人练习-Leetcode-939. Minimum Area Rectangle

题目链接:https://leetcode.cn/problems/minimum-area-rectangle/

题目大意:给出若干个点坐标。求由4个点构成的矩形(要求边平行于X轴、Y轴)的最小的面积。

思路:枚举对角线的点对,因为两个对角线的点((x1, y1), (x2, y2))确定了四个点就都确定了,矩形的面积也就确定了。用一个set存储所有点,枚举时,查询剩下两个点的坐标((x1, y2), (x1, y2))是否存在于set中,存在则可以构成一个矩形,计算面积,保留最小值即可。

完整代码

class Solution {
public:
    int minAreaRect(vector<vector<int>>& points) {
        set<pair<int, int>> pt;
        for (auto point : points)
            pt.insert(make_pair(point[0], point[1]));
        
        int ret = INT_MAX;
        int N = points.size();
        for (int i = 0; i < N; i++) {
            int x1 = points[i][0], y1 = points[i][1];
            for (int j = i+1; j < N; j++) {
                int x2 = points[j][0], y2 = points[j][1];
                if (x1 == x2 || y1 == y2)
                    continue;
                auto tmp1 = make_pair(x1, y2), tmp2 = make_pair(x2, y1);
                if (pt.count(tmp1) && pt.count(tmp2)) {
                    int area = abs(x1-x2) * abs(y1-y2);
                    ret = min(ret, area);
                }
            }
        }

        if (ret == INT_MAX)
            return 0;
        else
            return ret;
    }
};

你可能感兴趣的:(leetcode,算法,职场和发展)