【牛客网】迷宫问题与年终奖

news/2024/10/17 8:26:16/

目录

一、编程题

1.迷宫问题

2.年终奖

二、选择题 

1、将N条长度均为M的有序链表进行合并,合并以后的链表也保持有序,时间复杂度为()?

2、大小为MAX的循环队列中,f为当前对头元素位置,r为当前队尾元素位置(最后一个元素的位置),则任意时刻,队列中的元素个数为


 

一、编程题

1.迷宫问题

链接:迷宫问题_牛客题霸_牛客网 (nowcoder.com)

描述:定义一个二维数组 N*M ,如 5 × 5 数组下所示:

int maze[5][5] = {
0, 1, 0, 0, 0,
0, 1, 1, 1, 0,
0, 0, 0, 0, 0,
0, 1, 1, 1, 0,
0, 0, 0, 1, 0,
};
它表示一个迷宫,其中的1表示墙壁,0表示可以走的路,只能横着走或竖着走,不能斜着走,要求编程序找出从左上角到右下角的路线。入口点为[0,0],既第一格是可以走的路。

数据范围:  2≤n,m≤10  , 输入的内容只包含  0≤val≤1 

输入描述:输入两个整数,分别表示二维数组的行数,列数。再输入相应的数组,其中的1表示墙壁,0表示可以走的路。数据保证有唯一解,不考虑有多解的情况,即迷宫只有一条通道。

输出描述:左上角到右下角的最短路径,格式如样例所示。

示例1

输入:

5 5

0 1 0 0 0

0 1 1 1 0

0 0 0 0 0

0 1 1 1 0

0 0 0 1 0

输出:

(0,0)

(1,0)

(2,0)

(2,1)

(2,2)

(2,3)

(2,4)

(3,4)

(4,4)

说明:注意不能斜着走!!!

🔎做题思路:

6568c6a8541e470cb5dfbe116bd49caa.png

import java.util.ArrayList;
import java.util.Scanner;
class Node {int x;int y;public Node(int x, int y) {this.x = x;this.y = y;}
}public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);while (scanner.hasNext()) {String str = scanner.nextLine();String[] arr = str.split(" ");int row = Integer.parseInt(arr[0]);int col = Integer.parseInt(arr[1]);//创建迷宫矩阵int[][] mat = new int[row][col];//读入迷宫数据for (int i = 0; i < row; i++) {str = scanner.nextLine();arr = str.split(" ");for (int j = 0; j < col; j++) {mat[i][j] = Integer.parseInt(arr[j]);}}//搜索最短路径ArrayList<Node> path = new ArrayList<>();ArrayList<Node> minPath = new ArrayList<>();int[][] book = new int[row][col];getMinPath(mat, row, col, 0, 0, book, path, minPath);//打印最短路径for (Node n : minPath) {System.out.println("(" + n.x + "," + n.y + ")");}}}//mat:迷宫矩阵  row,col//x,y:当前位置//book:标记矩阵,标记当前位置是否走过//path:保存当前路径的每一个位置//minPath:保存最短路径public static void getMinPath(int[][] mat, int row, int col, int x, int y, int[][] book, ArrayList<Node> path, ArrayList<Node> minPath) {//判断(x,y)是否越界,是否走过,是否有障碍if (x < 0 || x >= row || y < 0 || y >= col || book[x][y] == 1 || mat[x][y] == 1) {return;}//把当前位置存入路径中path.add(new Node(x, y));//标记当前位置book[x][y] = 1;//判断当前位置是否为出口if (x == row -1 && y == col - 1) {//一条新的路径产生//判断是否为更短路径if (minPath.isEmpty() || path.size() < minPath.size()) {//更新更短路径minPath.clear();for (Node n: path) {minPath.add(n);}}}//如果不是出口:继续搜索(x,y)的上下左右四个方向getMinPath(mat, row, col, x + 1, y, book, path, minPath);//上getMinPath(mat, row, col, x - 1, y, book, path, minPath);//下getMinPath(mat, row, col, x, y - 1, book, path, minPath);//左getMinPath(mat, row, col, x, y + 1, book, path, minPath);//右//把当前位置从路径中删除,寻找新的路径path.remove(path.size() - 1);book[x][y] = 0;}
}

2.年终奖

链接:年终奖_牛客题霸_牛客网 (nowcoder.com)

描述:

小东所在公司要发年终奖,而小东恰好获得了最高福利,他要在公司年会上参与一个抽奖游戏,游戏在一个6*6的棋盘上进行,上面放着36个价值不等的礼物,每个小的棋盘上面放置着一个礼物,他需要从左上角开始游戏,每次只能向下或者向右移动一步,到达右下角停止,一路上的格子里的礼物小东都能拿到,请设计一个算法使小东拿到价值最高的礼物。

给定一个6*6的矩阵board,其中每个元素为对应格子的礼物价值,左上角为[0,0],请返回能获得的最大价值,保证每个礼物价值大于100小于1000。

🔎解题思路:

a26ea542444b4fc6a8601f8cc1addbd3.png

    public static int getMost(int[][] board) {int row = board.length;int col = board.length;//处理第一行for (int i = 1; i < col; i++) {board[0][i] += board[0][i - 1];}//处理第一列for (int i = 1; i < row; i++) {board[i][0] += board[i - 1][0];}//处理剩余位置for (int i = 1; i < row; i++) {for (int j = 1; j < col; j++) {//F(i,j) = max (F(i-1,j),F(i,j-1)) + board[i][j]board[i][j] += Math.max(board[i - 1][j], board[i][j - 1]);}}return  board[row - 1][col - 1];}

二、选择题 

1、将N条长度均为M的有序链表进行合并,合并以后的链表也保持有序,时间复杂度为()?

A O(N * M * logN)
B O(NM)
C O(N)
D O(M)

e0ff705cc3d34433be288ecddbf91d7f.png

2、大小为MAX的循环队列中,f为当前对头元素位置,r为当前队尾元素位置(最后一个元素的位置),则任意时刻,队列中的元素个数为

A r-f
B (r-f+MAX+1)%MAX
C r-f+1
D (r-f+MAX)%MAX

3b7b5f2e79924944bcb7cbcf0f4312dc.png

 


http://www.ppmy.cn/news/55631.html

相关文章

android10 关闭默认输入法的“更正建议”

1. 场景 使用系统默认的输入法&#xff0c;在进行输入时&#xff0c;在输入法上方&#xff0c;会显示更正建议列表&#xff0c;同时会干扰我们的输入内容&#xff1a;会自动补全到输入框&#xff0c;而且删除不掉&#xff0c;甚至越删越多&#xff0c;非常讨厌。 如下&#x…

科研闭环指南|学术论文撰写经验总结

前言&#xff1a;最近完成了自己人生中第一篇学术论文长文的撰写&#xff0c;从2023年4月12日完成初稿到2023年4月30日完成终稿这半个多月的时间里&#xff0c;在多位老师与师兄的帮助下&#xff0c;前前后后改了六七个版本&#xff0c;才改到大致满意的最终版&#xff08;在此…

7.6 密码设置与安全性分析(project)(安全意识)

目录 第1关 随机生成一个n位密码 第2关 将随机生成的n位密码MD5加密 第3关 生成黑客密码字典 第4关 模拟碰撞破解MD5密码 第5关 检查密码是否泄漏 第1关 随机生成一个n位密码 本关任务&#xff1a;编写一个能随机生成一个n位密码的小程序。 1pass01.txt 1pass02.txt 1pas…

【react从入门到精通】深入理解React生命周期

文章目录 前言React技能树React的生命周期是什么React v16.0前的生命周期组件初始化(initialization)阶段组件挂载(Mounting)阶段组件更新(update)阶段组件销毁阶段 React v16.4 的生命周期总结写在最后 前言 在上一篇文章《react入门这一篇就够了》中我们已经掌握了React的基本…

企业数据挖掘平台|道路运输安全大数据分析解决方案

TipDM大数据挖掘建模平台是由泰迪智能科技自主研发打造的可视化、一站式、高性能的数据挖掘与人工智能建模服务平台。目前已与民政、广电、电力、交通运输等多个行业的100客户达成及合作。 基于数据挖掘平台的道路运输安全大数据分析解决方案如下&#xff1a; 方案背景 …

json 中有递归parentId节点转 c#实体类时如何处理

如果您有一个具有递归parentId节点的JSON数据&#xff0c;并且您需要将其转换为C#实体类&#xff0c;则可以使用以下方法&#xff1a; 创建一个类来表示JSON对象的节点&#xff0c;包括它的属性和子节点。 public class Node {public int Id { get; set; }public string Name …

Python 3 教程_编程入门自学教程_菜鸟教程-免费教程分享

教程简介 Python 3入门教程 - 从基本概念开始&#xff0c;简单易学地了解Python 3&#xff0c;包括Python 3语法面向对象语言&#xff0c;环境设置&#xff0c;基本语法&#xff0c;变量类型&#xff0c;基本运算符&#xff0c;决策&#xff0c;循环&#xff0c;方法&#xff…

liunx 常用命令1-目录/文件:新建、修改、移动和删除

一. 新建、修改目录 创建 mkdir newdir #递归地创建多级目录 mkdir -p /path/to/newdir/subdir 更改权限 chmod 755 /path/to/directory 更改所有者和组 ##将“/home/user/documents”目录的所有者更改为“newown…