本题的算法标签是「前缀和」。
第一步:把「平均最大」变成「和最大」。 面积被固定为 maxArea,所以
avg(R)=maxArea∑(i,j)∈RcontrastMatrix[i][j]的分母是常数,比较 avg(R) 的大小等价于比较矩形内元素和 ∑RcontrastMatrix[i][j] 的大小。问题于是变成:在 m×n 矩阵中找一个面积恰好为 maxArea 的连续矩形,使元素和最大。
在收集相机应用的自动对焦系统中,画面被划分为 m×n 个对焦区域,每个区域的对比度用一个整数表示。现在需要选择一个面积恰好为 maxArea 的矩形区域,使其平均对比度值最大。
定义:选取一个 h 行 × w 列的连续矩形区域 R(h×w=maxArea,且矩形须完全位于矩阵内),其平均对比度为
avg(R)=maxArea∑(i,j)∈RcontrastMatrix[i][j]其中求和范围为区域 R 内的所有格子 (i,j)。由于面积固定为 maxArea,分母是常数,因此
「平均对比度值最大」等价于「矩形区域内对比度求和最大」。
请返回所有合法矩形中 avg(R) 的最大值,保留 5 位小数。
输入只有一行,形如:
[[1,2,3],[4,5,6]],2
即先用一对方括号包住整个矩阵:行与行之间用 ],[ 分隔,同一行内的元素之间用半角逗号分隔,逗号后不带空格;矩阵的方括号之后紧跟一个半角逗号,再给出整数 maxArea。
m 与 n 不在输入中单独给出:m 等于矩阵的行数,n 等于每一行的元素个数(各行元素个数相同)。读入代码应能容忍逗号/方括号前后的多余空白。
取值范围:
输出一行,为最大平均对比度,格式固定为「整数部分 + 小数点 + 恰好 5 位小数」,第 6 位小数四舍五入,位数不足时补 0。
例如 5.50000、40.00000、116.66667。评测按逐字节一致比对,请勿输出多余空格、单位或换行之外的字符。
输入
[[1,2,3],[4,5,6]],2
输出
5.50000
说明
面积必须恰好为 2,可行的尺寸只有 1×2 与 2×1:
[5,6],平均值 =(5+6)/2=5.5;[2,3],平均值 =2.5;[4,5],平均值 =4.5;(3,6),和 =9,平均值 =4.5。最大为 5.5,按格式返回 5.50000。
输入
[[10,20],[30,40]],1
输出
40.00000
说明
maxArea = 1,只能选单个格子,最大值是 40,按格式返回 40.00000。
输入
[[100,50,200],[150,80,120]],3
输出
116.66667
说明
面积恰好为 3,可选 1×3 或 3×1。矩阵是 2 行 3 列,3×1 需要 3 行,放不下,所以只能选 1×3:
[100,50,200]:350/3≈116.66667;[150,80,120]:350/3≈116.66667。最大为 116.66667。
Scan the QR code below with WeChat to sign in
设置一个用户名,下一步用微信扫码完成注册
请使用微信扫描下方二维码完成注册