题目如下:

Given a set of points in the xy-plane, determine the minimum area of a rectangle formed from these points, with sides parallel to the x and y axes.

If there isn't any rectangle, return 0.

Example 1:

Input: [[1,1],[1,3],[3,1],[3,3],[2,2]]
Output: 4

Example 2:

Input: [[1,1],[1,3],[3,1],[3,3],[4,1],[4,3]]
Output: 2

Note:

  1. 1 <= points.length <= 500
  2. 0 <= points[i][0] <= 40000
  3. 0 <= points[i][1] <= 40000
  4. All points are distinct.

解题思路:题目中约定了矩形的各边要与X轴或者Y轴平行,所以不妨把所有的点按X轴进行分组。例如 [[1,1],[1,3],[3,1],[3,3],[2,2]],以X的坐标分组后得到 {1: [1, 3], 2: [2], 3: [1, 3]},接下来只要判断两个不同的X轴所对应的Y轴的list中是否存在相同的元素,如果相同则表示可以组成一个题目中要求的矩形。最后求出最小面积即可。

代码如下:

class Solution(object):
def minAreaRect(self, points):
"""
:type points: List[List[int]]
:rtype: int
"""
dic_x = {}
res = float('inf')
x_set = set()
for (x,y) in points:
dic_x[x] = dic_x.setdefault(x,[]) + [y]
x_set.add(x)
x_list = sorted(list(x_set)) for kx1 in range(len(x_list)):
for kx2 in range(kx1+1,len(x_list)):
intersection = sorted((list(set(dic_x[x_list[kx1]]) & set(dic_x[x_list[kx2]]))))
if len(intersection) < 2:
continue
minDis = intersection[-1] - intersection[0]
for i in range(len(intersection)-1):
minDis = min(minDis,intersection[i+1] - intersection[i])
#print kx1,kx2,intersection
res = min(res, minDis * abs(x_list[kx1]-x_list[kx2]))
return res if res != float('inf') else 0

最新文章

  1. [LintCode] Longest Substring Without Repeating Characters
  2. matlab自带princomp(PCA降维方式)
  3. HDU - 1693 Eat the Trees(多回路插头DP)
  4. K - The Unique MST - poj 1679
  5. C++菱形继承的构造函数
  6. Mac经常使用快捷键
  7. 自己定义View之绘制圆环
  8. POJ Sudoku 数独填数 DFS
  9. VUE相关资料合集
  10. 【Android 应用开发】Android 数据存储 之 SQLite数据库详解
  11. 如何隐藏nginx版本号
  12. Elasticsearch6.5.2 X-pack破解及安装教程
  13. Servlet、Listener和Filter
  14. IntelliJ IDEA 2018破解方法
  15. Python写出LSTM-RNN的代码
  16. 常用Java集合类总结
  17. Hashtable 和 HashMap 以及 ConcurrentHashMap
  18. JS模块规范
  19. Excel对同样项求和
  20. C++中几个值得分析的小问题(1)

热门文章

  1. 转载关于struts命名空间的一则报警
  2. DB2数据库常用的函数总结
  3. Database基础(五):使用binlog日志、XtraBackup备份工具、MySQL AB复制
  4. zabbix监控winserver网卡流量
  5. 巴厘岛的雕塑(sculptures)
  6. ZROI week5
  7. SAS创建和使用索引(SAS INDEX)
  8. Toast 使用方法大全
  9. Django基础篇(一)
  10. Java学习之单例模式