给定矩形的长度L和宽度B ,并以(X,Y)坐标表示矩形中的孔的位置,任务是在给定的Rectangle中查找最大Rectangle的面积,使其不包含孔。
注意:矩形通过其与坐标轴接触的两个侧面放置在原点。
例子:
Input: L = 8, B = 8, X = 0, Y = 0
Output: 56
Explanation:
Since the hole is at origin, i.e. (0, 0), the maximum area rectangle can be cut from either (0, 1) or (1, 0) by reducing the length or breadth of the rectangle by one.
Hence, the maximum area rectangle that can be formed is = 7 * 8 = 56
Input: L = 1, B = 10, X = 0, Y = 3
Output: 6
Explanation:
Since the hole is at (0, 3), the maximum area rectangle can be cutted from the point (0, 4) by reducing the breadth to 6 and keeping the length as 1.
Hence, the maximum area rectangle that can be formed is = 6 * 1 = 6
方法:为了避免出现孔,可以从孔的上方,下方,左侧或右侧切割矩形,如下所示:
Position - Maximum area of rectangle
------------------------------------
Left - X * B
Right - (L - X - 1) * B
Above - L * Y
Below - (B - Y - 1) * L
因此,可以通过比较使用上述位置计算出的面积来计算最大矩形的所需面积。面积最大的位置将产生结果。
下面是上述方法的实现:
C++
// C++ implementation to find area of
// largest Rectangle without hole
// within a given Rectangle
#include
using namespace std;
// Function to find the maximum area
// such that it does not contains any hole
void maximumArea(int l, int b,
int x, int y)
{
// Area for all the possible
// positions of the cut
int left, right, above, below;
left = x * b;
right = (l - x - 1) * b;
above = l * y;
below = (b - y - 1) * l;
// Find the maximum area
// among the above rectangles
cout << max(max(left, right),
max(above, below));
}
// Driver Code
int main()
{
int L = 8, B = 8;
int X = 0, Y = 0;
// Function call
maximumArea(l, b, x, y);
return 0;
}
Java
// Java implementation to find area of
// largest Rectangle without hole
// within a given Rectangle
import java.util.*;
class GFG{
// Function to find the maximum area
// such that it does not contains any hole
static void maximumArea(int l, int b,
int x, int y)
{
// Area for all the possible
// positions of the cut
int left, right, above, below;
left = x * b;
right = (l - x - 1) * b;
above = l * y;
below = (b - y - 1) * l;
// Find the maximum area
// among the above rectangles
System.out.print(Math.max(Math.max(left, right),
Math.max(above, below)));
}
// Driver Code
public static void main(String[] args)
{
int L = 8, B = 8;
int X = 0, Y = 0;
// Function call
maximumArea(L, B, X, Y);
}
}
// This code is contributed by Rajput-Ji
Python3
# Python3 implementation to find area of
# largest Rectangle without hole
# within a given Rectangle
# Function to find the maximum area
# such that it does not contains any hole
def maximumArea(l, b,x, y):
# Area for all the possible
# positions of the cut
left, right, above, below = 0, 0, 0, 0
left = x * b
right = (l - x - 1) * b
above = l * y
below = (b - y - 1) * l
# Find the maximum area
# among the above rectangles
print(max(max(left, right),max(above, below)))
# Driver Code
l = 8
b = 8
x = 0
y = 0
# Function call
maximumArea(l, b, x, y)
# This code is contributed by mohit kumar 29
C#
// C# implementation to find area of
// largest Rectangle without hole
// within a given Rectangle
using System;
class GFG{
// Function to find the maximum area
// such that it does not contains any hole
static void maximumArea(int l, int b,
int x, int y)
{
// Area for all the possible
// positions of the cut
int left, right, above, below;
left = x * b;
right = (l - x - 1) * b;
above = l * y;
below = (b - y - 1) * l;
// Find the maximum area
// among the above rectangles
Console.Write(Math.Max(Math.Max(left, right),
Math.Max(above, below)));
}
// Driver Code
public static void Main(String[] args)
{
int L = 8, B = 8;
int X = 0, Y = 0;
// Function call
maximumArea(L, B, X, Y);
}
}
// This code is contributed by 29AjayKumar
56
性能分析:
- 时间复杂度:有一个简单的计算,不涉及任何迭代或递归。因此,时间复杂度将为O(1) 。
- 辅助空间复杂度:没有使用额外的空间。因此,辅助空间复杂度将为O(1) 。