21天活动Zyf打卡第二十一天Promise9913,完美矩形

 

方法一:哈希表
精确覆盖意味着:

矩形区域中不能有空缺,即矩形区域的面积等于所有矩形的面积之和;
矩形区域中不能有相交区域。
我们需要一个统计量来判定是否存在相交区域。由于精确覆盖意味着矩形的边和顶点会重合在一起,我们不妨统计每个矩形顶点的出现次数。同一个位置至多只能存在四个顶点,在满足该条件的前提下,如果矩形区域中有相交区域,这要么导致矩形区域四角的顶点出现不止一次,要么导致非四角的顶点存在出现一次或三次的顶点;

因此要满足精确覆盖,除了要满足矩形区域的面积等于所有矩形的面积之和,还要满足矩形区域四角的顶点只能出现一次,且其余顶点的出现次数只能是两次或四次。

在代码实现时,我们可以遍历矩形数组,计算矩形区域四个顶点的位置,以及矩形面积之和,并用哈希表统计每个矩形的顶点的出现次数。遍历完成后,检查矩形区域的面积是否等于所有矩形的面积之和,以及每个顶点的出现次数是否满足上述要求。


 

class Solution:
    def isRectangleCover(self, rectangles: List[List[int]]) -> bool:
        area, minX, minY, maxX, maxY = 0, rectangles[0][0], rectangles[0][1], rectangles[0][2], rectangles[0][3]
        cnt = defaultdict(int)
        for rect in rectangles:
            x, y, a, b = rect[0], rect[1], rect[2], rect[3]
            area += (a - x) * (b - y)

            minX = min(minX, x)
            minY = min(minY, y)
            maxX = max(maxX, a)
            maxY = max(maxY, b)

            cnt[(x, y)] += 1
            cnt[(x, b)] += 1
            cnt[(a, y)] += 1
            cnt[(a, b)] += 1

        if area != (maxX - minX) * (maxY - minY) or cnt[(minX, minY)] != 1 or cnt[(minX, maxY)] != 1 or cnt[(maxX, minY)] != 1 or cnt[(maxX, maxY)] != 1:
            return False

        del cnt[(minX, minY)], cnt[(minX, maxY)], cnt[(maxX, minY)], cnt[(maxX, maxY)]

        return all(c == 2 or c == 4 for c in cnt.values())

 

JavaScript Promise是一种用于处理异步操作的对象。它可以解决回调地狱问题,并提供了一种更加优雅和可读的方式来处理异步代码。Promise对象有三个状态:pending(进行中)、fulfilled(已成功)和rejected(已失败)。引用中提到了Promise的用法详解,可以作为参考。 在引用中的例子中,可以看到Promise的执行是异步的。通过创建一个Promise对象,并在其构造函数中传入一个执行器函数(resolve和reject函数),可以在函数内部执行异步操作。当异步操作完成后,可以通过调用resolve函数将结果传递给then方法的成功回调函数。 在引用中的例子中,定义了一个greet函数,该函数返回一个Promise对象。在Promise的构造函数中,可以通过调用resolve函数来将结果传递给then方法的成功回调函数。在调用greet函数后,可以通过调用then方法来获取Promise对象的结果。在示例中,打印出了Promise对象(p)和成功回调函数(v)的结果。 总之,JavaScript Promise是一种用于处理异步操作的对象,可以通过调用resolve函数将结果传递给then方法的回调函数。它提供了一种优雅的方式来处理异步代码,避免了回调地狱问题。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [js中的promise详解](https://blog.csdn.net/zyf971020/article/details/127015351)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [Javascript Promise用法详解](https://download.csdn.net/download/weixin_38538312/12957140)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值