当前位置: 首页 > 面试经验 >

【华为OD机试2023】简单的自动曝光Python

优质
小牛编辑
80浏览
2023-03-28

【华为OD机试2023】简单的自动曝光Python

题目描述:

一个图像有n个像素点,存储在一个长度为n的数组img里,每个像素点的取值范围[0,255]的正整数。 请你给图像每个像素点值加上一个整数k(可以是负数),得到新图newImg,使得新图newImg的所有像素平均值最接近中位值128。 请输出这个整数k。

输入描述:

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

例如:

0 0 0 0 

4个数值,中间用空格分开

输出描述:

一个整数k

补充说明:

• 1 <= n <= 100 • 如有多个整数k都满足,输出小的那个k;

• 新图的像素值会自动截取到[0,255]范围。当新像素值<0,其值会更改为0;当新像素值>255,其值会更改为255;

   例如newImg="-1 -2 256",会自动更改为"0 0 255"

示例1

输入:

0 0 0 0

输出:

128

说明:

四个像素值都为0

示例2

输入:

129 130 129 130

输出:

-2

说明:

-1的均值128.5,-2的均值为127.5,输出较小的数-2

解题思路:

复杂度有点高。用一个列表来存储曝光后的像素数据,再用一个列表lst来存储符合要求的k值。如果曝光后的平均值小于此前的最小值,则把lst清空,存入k


def f(lst:list):
sum=0
l=len(lst)
for i in lst:
sum+=i
return sum/l

img=list(map(int,input().split()))
min=128
lst=[]
for k in range(-255,256):
newimg=[xs+k if 0<=(xs+k)<=255 else 0 if (xs+k)<0 else 255 for xs in img]
newimg_count=f(newimg)
if abs(128-newimg_count)<min:
lst.clear()
lst.append(k)
min=abs(128-newimg_count)
print(sorted(lst)[0])

 类似资料: