leetcode最小面积_LeetCode939 最小面积矩形(示例代码)

LeetCode939最小面积矩形

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

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

Input

[[1,1],[1,3],[3,1],[3,3],[2,2]]

Output

4

hint

1 <= points.length <= 500

0 <= points[i][0] <= 40000

0 <= points[i][1] <= 40000

所有的点都是不同的。

题目大意

给许多点找出4个点构成矩形,求最小面积是多少,没有输出0

题目思路

考虑两个对角的点可以确定一个矩形。那么我们枚举两个对角点,再去判断矩形另外两个点是否存在。

枚举复杂度O(n^2)判断是否存在用map O(log(n))

复杂度O(log(n)*n^2) n = 500

下面给出AC代码

class Solution

{

public:

map,int>mmp;

int getArea(int x1,int y1,int x2,int y2)

{

if(mmp[make_pair(x1,y2)]&&mmp[make_pair(x2,y1)])

{

return (x2-x1)*(y2-y1);

}

else

{

return -1;

}

}

int minAreaRect(vector>& points)

{

int f = 0,Min = 0;

for(int i=0; i

mmp[make_pair(points[i][0],points[i][1])]++;

for(int i=0; i

{

for(int j=i+1; j

{

int x1 = points[i][0],x2 =points[j][0],y1 = points[i][1],y2 =points[j][1];

if(x1==x2||y1==y2)

continue;

if(x1>x2&&y1>y2)

{

int area = getArea(x2,y2,x1,y1);

if(area==-1)

continue;

if(f)

Min = min(area,Min);

else

Min = area,f=1;

}

else if(x1

{

int area = getArea(x1,y1,x2,y2);

if(area==-1)

continue;

if(f)

Min = min(area,Min);

else

Min = area,f=1;

}

else if(x1y2)

{

if(mmp[make_pair(x2,y1)]&&mmp[make_pair(x1,y2)])

{

if(f)

Min = min((y1-y2)*(x2-x1),Min);

else

Min = (y1-y2)*(x2-x1),f=1;

}

}

else

{

if(mmp[make_pair(x2,y1)]&&mmp[make_pair(x1,y2)])

{

if(f)

Min = min((y2-y1)*(x1-x2),Min);

else

Min = (y2-y1)*(x1-x2),f=1;

}

}

}

}

return f?Min:0;

}

};

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值