leetcode2975. 移除栅栏得到的正方形田地的最大面积

简介: leetcode2975. 移除栅栏得到的正方形田地的最大面积

题目

有一个大型的 (m - 1) x (n - 1) 矩形田地,其两个对角分别是 (1, 1)(m, n) ,田地内部有一些水平栅栏和垂直栅栏,分别由数组 hFencesvFences 给出。

水平栅栏为坐标 (hFences[i], 1)(hFences[i], n),垂直栅栏为坐标 (1, vFences[i])(m, vFences[i])

返回通过 移除 一些栅栏(可能不移除)所能形成的最大面积的 正方形 田地的面积,或者如果无法形成正方形田地则返回 -1

由于答案可能很大,所以请返回结果109 + 7 取余 后的值。

注意:田地外围两个水平栅栏(坐标 (1, 1)(1, n) 和坐标 (m, 1)(m, n) )以及两个垂直栅栏(坐标 (1, 1)(m, 1) 和坐标 (1, n)(m, n) )所包围。这些栅栏 不能 被移除。

示例 1:

输入:m = 4, n = 3, hFences = [2,3], vFences = [2]

输出:4

解释:移除位于 2 的水平栅栏和位于 2 的垂直栅栏将得到一个面积为 4 的正方形田地。


示例 2:

输入:m = 6, n = 7, hFences = [2], vFences = [4]

输出:-1

解释:可以证明无法通过移除栅栏形成正方形田地。


提示:

3 <= m, n <= 109
1 <= hFences.length, vFences.length <= 600
1 < hFences[i] < m
1 < vFences[i] < n
hFences 和 vFences 中的元素是唯一的。

Problem: https://leetcode.cn/problems/maximum-squar100169 e-area-by-removing-fences-from-a-field/description/

[TOC]

思路

遍历所有的横向栏杆与纵向栏杆,算出横向栏杆之间的差和纵向栏杆之间的差并存储两个集合,最终的答案就是两个集合的交集的平方

复杂度

时间复杂度:

O(m^2+n^2)

空间复杂度:

O(m+n)

Code

class Solution:
    def maximizeSquareArea(self, m: int, n: int, hFences: List[int], vFences: List[int]) -> int:
        
        ans = -1
        hFences.append(m)
        hFences.insert(0,1)
 
        row = set()
        for i in range(len(hFences)):
            for j in range(0,i):
                row.add(abs( hFences[i] - hFences[j] ))
                    
        vFences.append(n)
        vFences.insert(0,1)
 
        col = set()
        for i in range(len(vFences)):
            for j in range(0,i):
                col.add(abs(vFences[i] - vFences[j]))
                
                if abs(vFences[i] - vFences[j]) in row :
                    ans = max(ans,pow(abs(vFences[i] - vFences[j]),2))
 
        for val in row:
            if val in col:
                ans = max(ans,pow(val,2))
       
        return ans % 1_000_000_007 if 


目录
相关文章
|
7月前
|
算法 Go
golang力扣leetcode 587.安装栅栏
golang力扣leetcode 587.安装栅栏
44 0
|
7月前
|
算法 vr&ar 图形学
☆打卡算法☆LeetCode 223. 矩形面积 算法解析
☆打卡算法☆LeetCode 223. 矩形面积 算法解析
|
4月前
|
Python
【Leetcode刷题Python】473. 火柴拼正方形
LeetCode题目473的Python编程解决方案,题目要求使用给定长度的火柴棒拼成一个正方形,不能折断火柴棒且每根火柴棒必须使用一次,判断是否能拼成正方形。
33 2
|
7月前
|
算法 定位技术
【leetcode】剑指 Offer II 105. 岛屿的最大面积-【深度优先DFS】
【leetcode】剑指 Offer II 105. 岛屿的最大面积-【深度优先DFS】
74 0
|
7月前
|
JavaScript
【leetcode】221--最大正方形-动态规划法
【leetcode】221--最大正方形-动态规划法
31 0
|
7月前
|
JavaScript
【leetcode】221. 最大正方形 动态规划法
【leetcode】221. 最大正方形 动态规划法
25 0
|
7月前
leetcode-695:岛屿的最大面积
leetcode-695:岛屿的最大面积
56 0
|
7月前
leetcode-221:最大正方形
leetcode-221:最大正方形
47 0
|
7月前
leetcode-593:有效的正方形
leetcode-593:有效的正方形
35 0
|
7月前
|
Go
golang力扣leetcode 221.最大正方形
golang力扣leetcode 221.最大正方形
49 0