目录
题目描述
黑白图像常采用灰度图的方式存储,即图像的每个像素填充一个灰色阶段值,256阶灰图是一个灰阶值取值范围为 0~255 的灰阶矩阵,0表示全黑,255表示全白,范围内的其他值表示不同的灰度。
但在计算机中实际存储时,会使用压缩算法,其中一个种压缩格式描述如如下:
10 10 255 34 0 1 255 8 0 3 255 6 0 5 255 4 0 7 255 2 0 9 255 21
所有的数值以空格分隔;
前两个数分别表示矩阵的行数和列数;
从第三个数开始,每两个数一组,每组第一个数是灰阶值,第二个数表示该灰阶值从左到右,从上到下(可理解为二维数组按行存储在一维矩阵中)的连续像素个数。比如题目所述的例子, “255 34” 表示有连续 34 个像素的灰阶值是 255。
如此,图像软件在打开此格式灰度图的时候,就可以根据此算法从压缩数据恢复出原始灰度图矩阵。
请从输入的压缩数恢复灰度图原始矩阵,并返回指定像素的灰阶值。
输入描述
10 10 255 34 0 1 255 8 0 3 255 6 0 5 255 4 0 7 255 2 0 9 255 21
3 4
输入包行两行:
- 第一行是灰度图压缩数据
- 第二行表示一个像素位置的行号和列号,如 0 0 表示左上角像素
输出描述
0
输出数据表示的灰阶矩阵的指定像素的灰阶值。
备注
- 系保证输入的压缩数据是合法有效的,不会出现数据起界、数值不合法等无法恢复的场景
- 系统保证输入的像素坐标是合法的,不会出现不在矩阵中的像素
- 矩阵的行和列数范图为:(0,100]
- 灰阶值取值范图:[0,255]
参考示例
示例1
输入
10 10 56 34 99 1 87 8 99 3 255 6 99 5 255 4 99 7 255 2 99 9 255 21
3 4
输出
99
示例2
输入
10 10 255 34 0 1 255 8 0 3 255 6 0 5 255 4 0 7 255 2 0 9 255 21
3 5
输出
255
参考代码
import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int[] nums = Arrays.stream(sc.nextLine().split(" ")).mapToInt(Integer::parseInt).toArray();
int[] pos = Arrays.stream(sc.nextLine().split(" ")).mapToInt(Integer::parseInt).toArray();
int rows = nums[0];
int cols = nums[1];
int[] graph = new int[rows * cols];
int start = 0;
for (int i = 2; i < nums.length; i += 2) {
// 灰阶值
int gray = nums[i];
// 该灰阶值从左到右,从上到下(可理解为二维数组按行存储在一维矩阵中)的连续像素个数
int len = nums[i + 1];
Arrays.fill(graph, start, start + len, gray);
start += len;
}
// 将二维坐标转为一维坐标
int target = pos[0] * cols + pos[1];
System.out.println(graph[target]);
}
}
机试介绍
三道中等难度题目,总分400分,前两道均为100分,后一道为200分,每道题的时间限制为1S(常规算法解答不出,可以用暴力方法)
机考分数是按照题目用例的通过数量的比例算分数 (若最后一道题做不出来,可将边界情况结果等写出来 )
机考时长2个半小时,若以冲刺机考最高分为目的,则做题时间分配前两道题40分钟,最后一题70分钟(平时练习可以按照40分钟的时限)
机考分数线根据招聘目标院校和非目标院校有不同(不同 华为招聘部门会有差异)
写在最后
创作不易!
如果觉得内容对你有帮助,麻烦给个三连关注支持一下我!
如果有错误,请在评论区指出,我会及时更改!
感谢各位的阅读,文章掺杂个人理解,如有错误请联系我指出~