963.leetcode题目讲解(Python):最小面积矩形 II(Minimum Area Rectangle II)

题目

题目

解题思路

  1. 找出所有的矩形
  2. 逐一计算面积,找出面积最小的矩形

对于步骤1,判断是否为矩形的条件是:其对角线相交的中心点到四个角的距离相等。如下图所示:


矩形判断

这里有个小技巧,为了对 list 中的点进行向量计算,我们使用 complex() 函数将这些点变为复数形式。complex用法示例如下:

>>> complex(1, 2)
>>> (1 + 2j)

忘了向量运算的,可以稍微复习一下:

向量加法:A(x1, y1) + B (x2, y2) = (x1 + x2, y1 + y2)
向量减法:A(x1, y1) - B (x2, y2) = (x1 - x2, y1 - y2)

参考代码(beats 95%):

'''
@auther: Jedi.L
@Date: Tue, Apr 30, 2019 3:40
@Email: xiangyangan@gmail.com
@Blog: www.tundrazone.com
'''

import itertools
import collections


class Solution(object):
    def minAreaFreeRect(self, points):
        points = [complex(*z) for z in points]
        seen = collections.defaultdict(list)
        for P, Q in itertools.combinations(points, 2):
            center = (P + Q) / 2  # get the center point
            radius = abs(center - P)  # caculate the distance
            # Only record P here, because Q =  2 * center - P
            seen[center, radius].append(P)

        res = float("inf")
        for (center, radius), candidates in seen.items():
            for P, Q in itertools.combinations(candidates, 2):
                # caculate area
                res = min(res, abs(P - Q) * abs(P - (2 * center - Q)))

        return res if res < float("inf") else 0

其他题目答案

leetcode题目答案讲解汇总(Python版 持续更新)

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • //出自51博客:www.Amanda0928.51.com 第一章 一、选择题 1.B; (typedef ,t...
    Damongggggg阅读 11,213评论 0 1
  • 来源: http://www.douban.com/group/topic/14820131/ 调整变量格式: f...
    MC1229阅读 6,964评论 0 5
  • 前言 最近公司比较闲,那么自己也找点事情做。这道题呢在我写这篇文章的时候谷歌、百度上都没有答案,于是乎自己就来解答...
    Thebloodelves阅读 2,092评论 3 6
  • 江南春美在色彩。山河褪去冬衣,细雨浇出新绿。春天之神象一个画师,在大自然的调色板上绘出了...
    冰夫阅读 155评论 0 0
  • 无论如何,请你满饮我在月光下为你斟的这杯新醅的酒。此去是春、是夏、是秋、是冬,是风、是雪、是雨、是雾,是东、是南、...
    云云云央阅读 996评论 0 0