Leetcode 939:最小面积矩形

题目描述

给定在 xy 平面上的一组点,确定由这些点组成的矩形的最小面积,其中矩形的边平行于 x 轴和 y 轴。

如果没有任何矩形,就返回 0。

 

示例 1:

输入:[[1,1],[1,3],[3,1],[3,3],[2,2]]
输出:4

示例 2:

输入:[[1,1],[1,3],[3,1],[3,3],[4,1],[4,3]]
输出:2

提示:

  1. 1 <= points.length <= 500
  2. 0 <= points[i][0] <= 40000
  3. 0 <= points[i][1] <= 40000
  4. 所有的点都是不同的。

解题思路

每次选择两个点看作对角线上的点,然后查找另外两个点是否在points中,如果在,计算构成举行的面积,否则不做处理;一开始对于查找另外两个点没有想到好的解决办法,时间复杂度O(N)去查找,参考评论区大佬的解决办法,使用set实现O(logN)时间复杂度查找(获得的小小启示是,对于优化O(N)到O(logN)的问题,可以考虑使用set或map辅助)

int minAreaRect(vector<vector<int>>& points) {
        set<int> st;
        int minArea = INT_MAX;
        int trans = 40000;
        int len = points.size();
        for(int i=0;i<len;i++){
            int x1 = points[i][0],y1 = points[i][1];
            for(int j=0;j<len;j++){
                int x2 = points[j][0],y2 = points[j][1];
                if(x1 == x2 || y1 == y2) continue;
                if((st.find(x1*trans+y2)!=st.end()) && (st.find(x2*trans+y1)!=st.end())){
                    minArea = min(minArea,abs((x1-x2)*(y1-y2)));
                }
            }
            st.insert(x1*trans+y1);
        }
        return (minArea==INT_MAX)?0:minArea;
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值