3 solutions
-
0
思路分析
题目要求找到一个整数
k
,将所有像素点的亮度值都加上k
后,使得新数组newImg
的平均亮度值尽可能接近128
。我们可以通过遍历k
的可能值,从-255
到255
,逐一测试找到最优解。对于每一个可能的
k
值:- 加法运算:将每个像素值都加上
k
。 - 截断处理:如果新的亮度值低于
0
,则将其设为0
;如果高于255
,则设为255
,以确保像素值保持在有效范围内。 - 计算平均值:对每个经过处理的像素值求和并计算新图像
newImg
的平均值。 - 求解最优解:与目标值
128
的差值最小的k
即为最优解。如果有多个k
值满足条件,则取较小的那个。
算法流程
- 遍历所有可能的
k
值:在范围[-255, 255]
中枚举k
的每一个值。 - 计算
newImg
:对img
数组中的每个元素i
加上k
,并将结果限制在[0, 255]
的范围内。 - 计算与目标值的差距:计算所有元素的和,除以元素个数以得到平均值,与
128
的绝对差值最小的k
即为答案。 - 更新结果:如果当前的绝对差值比之前的最小差值小,则更新结果
k
。
时间复杂度
对于给定的数据范围 ( n <= 100 ):
- 枚举
k
的所有值,共 (511) 个(范围[-255, 255]
)。 - 对每个
k
,需要遍历一次数组 ( img ) 进行求和,复杂度为 (O(n))。
因此,算法的时间复杂度为 (O(n + 511) = O(n)),可在线性时间内完成。
代码
Python代码
C++代码
Java代码
Js代码
- 加法运算:将每个像素值都加上
- 1
Information
- ID
- 26
- Time
- 1000ms
- Memory
- 256MiB
- Difficulty
- 3
- Tags
- # Submissions
- 431
- Accepted
- 86
- Uploaded By