1. 华为OD机考题 + 答案
2023华为OD统一考试(A+B卷)题库清单-带答案(持续更新)
2023年华为OD真题机考题库大全-带答案(持续更新)
2. 面试题
一手真实java面试题:2023年各大公司java面试真题汇总--持续更新
3. 技术知识
java后端技术汇总 + 中间件 + 架构思想
新号塔之间消息传输
在给定的 mxn 网格地图grid中,分布看一些信号塔,用来各区域间通信,每个单元格可以有以下三个状态:
值0代表空地,无法传递信号;
值1代表信号塔A,在收到消息后,信号塔A在1ms后可以将信号发送给上下左右四个方向的信号塔;
值2代表信号塔B,在收到消息后,信号塔B在2ms后可以将信号发送给上下左右四个方向的信号塔,
先给定一个坐标(j,k)输入保证坐标 (j,k)位置一定有信号塔,在坐标(,k)位置的信号塔触发一个信号
返回 网格地图中所有信号塔收到信号的最小时间,单位为ms。如果不可能,返回-1。
输入
网格的列数n
网格的行数m
触发信号的信号塔坐标(j,k)
第0行网格n个位置的信号塔安装信息(通过空格间隔每个状态值)
第m-1行网格n个位置的信号塔安装信息
输出返回 网格地图中所有信号塔收到信号的最小时间,单位为ms。如果不可能,返回-1。
测试用例:
3
3
1 0
0 1 2
1 2 2
0 1 2 ---->4
3
3
1 0
0 1 2
1 2 1
0 1 2 ----->4
3
3
1 0
0 1 2
1 2 2
0 2 2 -->5
2
2
1 0
1 1
2 2 -->3
2
2
1 0
1 1
1 2 -->2
//非最优,还需优化
public class SignalTime {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = Integer.parseInt(sc.nextLine());
int m = Integer.parseInt(sc.nextLine());
//坐标
int site[] = Arrays.stream(sc.nextLine().split(" ")).mapToInt(Integer::parseInt).toArray();
//信号塔方阵
int signal[][] = new int[n][m];
for (int i = 0; i < n;i++){
for (int j = 0; j < m;j++){
signal[i][j] = sc.nextInt();
}
}
minSignalTime(site,signal);
}
/**
一次把map中已标记的坐标按上下左右查找,空值就放信号灯Map(重复)
2值使用的次数 0 就是2ms 不然就是1ms
* @param site 当前位置
* @param signal 矩阵数据
* @return
*/
public static void minSignalTime(int site[],int signal[][]){
int time = 0;
//记录初始信息
SingalInfo singalInfo = new SingalInfo();
singalInfo.n = site[0];
singalInfo.m = site[1];
singalInfo.value = signal[site[0]][site[1]];
List singalInfos = new ArrayList<>();
singalInfos.add(singalInfo);
//每一次循环能传递新号的灯塔
Map