面试题|华为OD机考题
3549
发布于 未知归属地
  1. 一个图像数组img,img[i]的数据范围都是[0,255],现给img所有元素加上一个整数k(可以为负),使得到的新数组的和的平均值最接近中位数128,返回k。img[i]+k大于255,就需要减去256

示例一:输入0 0 0 0, 返回128
示例二:输入129 130 129 130, 返回-2, k = -1 时平均值为128.5, k = -2 时平均值为127.5, 都符合条件,取较小值-2

一开始我是直接遍历img,得出数组和与中位数128的总差值sum,得出avg,这样做在avg<0的时候是正确的,此时avg+k≈128,那么k一定是正数,如果存在多个结果,此时的k也是最小值,但是反过来avg>0的时候,存在多个结果的k不是最小值,在上述例子2中会返回-1而不是-2,我感觉单纯的-1不太对,不知道怎么判断了。这样没做出来,最后是使用了暴力枚举,从-128到127枚举k,太不美丽了。


  1. 定义如下方的字符串,第一个字符串为R, 第二个字符串为BR, 第三个字符串为RBBR, 第四个字符串为BRRBRBBR, 第五个字符串为RBBRBRRBBRRBRBBR...
    第i个字符串等于第i-1个字符串取反再加上第i-1个字符串(取反:R->B, B->R)
    给定一个n, k,求第n个字符串的第k个字符是什么?

用例1: 输入 5 1 0 2 1 3 2 4 6 5 8
red red blue blue blue, 第一个5表示有5组输入
用例2: 输入 1 64 73....(具体哪个数忘了)
数据范围: 1<=n<=64

先暴力再说,直接算出第n个字符串是什么,再遍历到第k个字符...恭喜你,打败了2.13%的测试用例。
我的想法是比较k和2^n/2的大小关系
如果k大,则说明k在dp[n]的右边,变成了k和2^(n-1)/2的子问题
如果k小,则说明k在dp[n]的左边,变成了k和reverse(2^(n-1)/2)的子问题
然后是边界条件,n==1的时候返回'R',这样定义是对的吗?


  1. 一家公司希望在一条街道上建立新的服务中心。公司统计了该街道中所有区域在地图上位置,并希望以此为依据为新的服务中心选址:使服务中心到所有区域的距离的总和最小。
    给定一个数组positions,其中positions[i]=[left, right],表示第i个区域在街道上的位置,其中left使区域左侧起点,right是右侧终点,设选择服务中心的位置为location。
    如果第i个区域的右侧起点right满足right < location, 则第i个区域到服务中心的距离为location - right;
    如果第i个区域的左侧起点left满足left > location, 则第i个区域到服务中心的距离为left - location;
    如果第i个区域的两个left, right满足left <= location <= right, 则第i个区域到服务中心的距离为0;
    选择最佳的服务中心位置location,返回该位置到所有区域的距离总和的最小值。

输入positions=[[1,2],[3,4],[10,20]]
8, location = 3, 区域1距离为1, 区域2距离为0, 区域3距离为7

个人感觉是双指针问题,求大佬们指教orz

评论 (9)