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<pair<int,int>,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<vector<int>>& points)
{
int f = 0,Min = 0;
for(int i=0; i<points.size(); i++)
mmp[make_pair(points[i][0],points[i][1])]++;
for(int i=0; i<points.size(); i++)
{
for(int j=i+1; j<points.size(); 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<x2&&y1<y2)
{
int area = getArea(x1,y1,x2,y2);
if(area==-1)
continue;
if(f)
Min = min(area,Min);
else
Min = area,f=1;
}
else if(x1<x2&&y1>y2)
{
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;
}
};

LeetCode939 最小面积矩形的更多相关文章

  1. [Swift]LeetCode939. 最小面积矩形 | Minimum Area Rectangle

    Given a set of points in the xy-plane, determine the minimum area of a rectangle formed from these p ...

  2. [Swift]LeetCode963. 最小面积矩形 II | Minimum Area Rectangle II

    Given a set of points in the xy-plane, determine the minimum area of any rectangle formed from these ...

  3. UVA10173 Smallest Bounding Rectangle 最小面积矩形覆盖

    \(\color{#0066ff}{题目描述}\) 给定n(>0)二维点的笛卡尔坐标,编写一个程序,计算其最小边界矩形的面积(包含所有给定点的最小矩形). 输入文件可以包含多个测试样例.每个测试 ...

  4. LeetCode 939. Minimum Area Rectangle (最小面积矩形)

    题目标签:HashMap 题目给了我们一组 xy 上的点坐标,让我们找出 能组成矩形里最小面积的那个. 首先遍历所有的点,把x 坐标当作key 存入map, 把重复的y坐标 组成set,当作value ...

  5. Leetcode963. Minimum Area Rectangle II最小面积矩形2

    给定在 xy 平面上的一组点,确定由这些点组成的任何矩形的最小面积,其中矩形的边不一定平行于 x 轴和 y 轴. 如果没有任何矩形,就返回 0. 示例 1: 输入:[[1,2],[2,1],[1,0] ...

  6. BZOJ 1185: [HNOI2007]最小矩形覆盖-旋转卡壳法求点集最小外接矩形(面积)并输出四个顶点坐标-备忘板子

    来源:旋转卡壳法求点集最小外接矩形(面积)并输出四个顶点坐标 BZOJ又崩了,直接贴一下人家的代码. 代码: #include"stdio.h" #include"str ...

  7. matlab练习程序(最小包围矩形)

    又是计算几何,我感觉最近对计算几何上瘾了. 当然,工作上也会用一些,不过工作上一般直接调用boost的geometry库. 上次写过最小包围圆,这次是最小包围矩形,要比最小包围圆复杂些. 最小包围矩形 ...

  8. opencv —— boundingRect、minAreaRect 寻找包裹轮廓的最小正矩形、最小斜矩形

    寻找包裹轮廓的最小正矩形:boundingRect 函数 返回矩阵应满足:① 轮廓上的点均在矩阵空间内.② 矩阵是正矩阵(矩形的边界与图像边界平行). Rect boundingRect(InputA ...

  9. L3-021 神坛(极角排序求三角形最小面积)

    在古老的迈瑞城,巍然屹立着 n 块神石.长老们商议,选取 3 块神石围成一个神坛.因为神坛的能量强度与它的面积成反比,因此神坛的面积越小越好.特殊地,如果有两块神石坐标相同,或者三块神石共线,神坛的面 ...

随机推荐

  1. jumpserver1.4.1 安装过程

    # 修改字符集 localedef -c -f UTF-8 -i zh_CN zh_CN.UTF-8 export LC_ALL=zh_CN.UTF-8 echo 'LANG="zh_CN. ...

  2. 【pycharm】Pycharm对 axios语法的支持问题

    问题: 解决办法: 1,找到pychar的settings 2,ECMAScript6

  3. HC-08 BLE资料

    1.1 特点简介 HC-08蓝牙串口通信模块是新一代的基于Bluetooth Specification V4.0 BLE蓝牙协议的数传模块.无线工作频段为 2.4GHz ISM,调制方式是 GFSK ...

  4. 异步编程CompletableFuture实现高并发系统优化之请求合并

    先说场景: 根据Redis官网介绍,单机版Redis的读写性能是12万/秒,批量处理可以达到70万/秒.不管是缓存或者是数据库,都有批量处理的功能.当我们的系统达到瓶颈的时候,我们考虑充分的压榨缓存和 ...

  5. 爬虫环境搭建及 scrapy 启动

    创建虚拟环境 C:\Users\Toling>mkvirtualenv article 这个是普通的创建虚拟环境,但是实际开发中可能会使用python2或python3所以我们需要指定开发的环境 ...

  6. str_replace导致的注入问题汇总

    研究了下replace的注入安全问题. 一般sql注入的过滤方式就是引用addslashes函数进行过滤. 他会把注入的单引号转换成\',把双引号转换成\",反斜杠会转换成\\等 写一段ph ...

  7. 【JDK】JDK源码分析-AbstractQueuedSynchronizer(3)

    概述 前文「JDK源码分析-AbstractQueuedSynchronizer(2)」分析了 AQS 在独占模式下获取资源的流程,本文分析共享模式下的相关操作. 其实二者的操作大部分是类似的,理解了 ...

  8. 后端基于方法的权限控制--Spirng-Security

    后端基于方法的权限控制--Spirng-Security 默认情况下, Spring Security 并不启用方法级的安全管控. 启用方法级的管控后, 可以针对不同的方法通过注解设置不同的访问条件: ...

  9. Win服务程序编写以及安装一般步骤

    Win服务程序编写以及安装一般步骤 Windows服务的优点有:1. 能够自动运行.2. 不要求用户交互.3. 在后台运行.本文将介绍常见服务程序编写的一般步骤以及注意事项. 设计服务程序实例: 创建 ...

  10. java高并发系列 - 第25天:掌握JUC中的阻塞队列

    这是java高并发系列第25篇文章. 环境:jdk1.8. 本文内容 掌握Queue.BlockingQueue接口中常用的方法 介绍6中阻塞队列,及相关场景示例 重点掌握4种常用的阻塞队列 Queu ...