矩形蛋糕的高度爲 h 且寬度爲 w,給你兩個整數數組 horizontalCuts 和 verticalCuts,其中 horizontalCuts[i] 是從矩形蛋糕頂部到第 i 個水平切口的距離,類似地, verticalCuts[j] 是從矩形蛋糕的左側到第 j 個豎直切口的距離。
請你按數組 horizontalCuts 和 verticalCuts 中提供的水平和豎直位置切割後,請你找出 面積最大 的那份蛋糕,並返回其 面積 。由於答案可能是一個很大的數字,因此需要將結果對 10^9 + 7 取餘後返回。
示例 1:
輸入:h = 5, w = 4, horizontalCuts = [1,2,4], verticalCuts = [1,3]
輸出:4
解釋:上圖所示的矩陣蛋糕中,紅色線表示水平和豎直方向上的切口。切割蛋糕後,綠色的那份蛋糕面積最大。
示例 2:
輸入:h = 5, w = 4, horizontalCuts = [3,1], verticalCuts = [1]
輸出:6
解釋:上圖所示的矩陣蛋糕中,紅色線表示水平和豎直方向上的切口。切割蛋糕後,綠色和黃色的兩份蛋糕面積最大。
示例 3:
輸入:h = 5, w = 4, horizontalCuts = [3], verticalCuts = [3]
輸出:9
摘要:分別求出橫向和縱向的最大最小間隔,之後乘積取餘就是所求
class Solution {
public int maxArea(int h, int w, int[] horizontalCuts, int[] verticalCuts) {
int mod = (int) 1e9+7;
Arrays.sort(horizontalCuts);
Arrays.sort(verticalCuts);
long hmax=horizontalCuts[0];
if(horizontalCuts.length==1)
{
hmax=Math.max(horizontalCuts[0],h-horizontalCuts[0]);
}
else
{
for(int i=1;i<horizontalCuts.length;i++)
{
if(horizontalCuts[i]-horizontalCuts[i-1]>hmax)
{
hmax=horizontalCuts[i]-horizontalCuts[i-1];
}
}
if(h-horizontalCuts[horizontalCuts.length-1]>hmax)
{
hmax=h-horizontalCuts[horizontalCuts.length-1];
}
}
long vmax=verticalCuts[0];
if(verticalCuts.length==1)
{
vmax=Math.max(verticalCuts[0],w-verticalCuts[0]);
}
else
{
for(int i=1;i<verticalCuts.length;i++)
{
if(verticalCuts[i]-verticalCuts[i-1]>=vmax)
{
vmax=verticalCuts[i]-verticalCuts[i-1];
}
}
if(w-verticalCuts[verticalCuts.length-1]>=vmax)
{
vmax=w-verticalCuts[verticalCuts.length-1];
}
}
return (int) ((hmax * vmax) % mod);
}
}
class Solution {
public int minReorder(int n, int[][] connections) {
int count=0;
Set<Integer> list=new HashSet<>();
list.add(0);
for(int i=0;i<connections.length;i++)
{
if(list.contains(connections[i][1]))
{
list.add(connections[i][0]);
}
else if(list.contains(connections[i][0]))
{
count++;
list.add(connections[i][1]);
}
}
return count;
}
}