华为OD机试真题 Java 实现【简单的自动曝光】【2023Q1 100分】

一、题目描述

一个图像有 n 个像素点,存储在一个长度为 n 的数组 img 里,每个像素点的取值范围[0,255]的正整数。

请你给图像每个像素点值加上一个整k(可以是负数),得到新图 newlmg,使得新图 newlmg 的所有像素平均值最接近中位值 128。

请输出这个整数 k。

二、输入描述

n 个整数,中间用空格分开。

三、输出描述

一个整数 k。

四、备注

1 <= n <= 100。

如有多个整数 k 都满足,输出小的那个 k;

新图的像素值会自动截取到[0,255]范围。当新像素值<0,其值会更改为0,当新像素值>255,其值会更改为 255:例如 newlmg=”-1 -2 256”,会自动更改为”0 0 255"

五、解题思路

  1. 读取输入的整数数组 nums;
  2. 初始化变量 num 为数组长度,表示像素点的个数;
  3. 初始化变量 diff 为最大值,用于记录当前差值的绝对值;
  4. 初始化变量 ret 为 null,用于记录最小差值对应的整数 k;
  5. 使用循环遍历 k的取值范围从 -127 到 128;
    • 计算每个取值 k 对应的新图像像素值总和 sum;
    • 对于每个像素值,将其加上 k 并进行范围限制,使得新像素值在 [0, 255] 范围内;
    • 更新 sum 为新图像像素值的总和;

你可能感兴趣的:(java,华为,开发语言,算法,面试)