• 笔试强训(二十四)


    一、选择题

    (1)将N条长度均为M的有序链表进行合并,合并以后的链表也保持有序,时间复杂度为(A)
    A.O(NMlogN)
    B.O(N*M)
    C.O(N)
    D.O(M)

    1. 建立一个元素个数为N的小根堆,时间复杂度为O(N)
    2. 取出堆顶元素后,将该队顶元素的下一个元素入堆,并向下调整,该步骤需要重复N*M次,每次调整的时间复杂度是O(logN),总的时间复杂度为O(N * M * logN)

    (2)大小为MAX的循环队列中,f为当前队头元素位置,f为当前队尾元素位置,则任意时刻,队列中元素个数为(B)
    A.r-f
    B.(r-f+MAX+1)%MAX
    C.r-f+1
    D.(r-f+MAX)%MAX

    (3)已知某个哈希表的n个关键字具有相同的哈希值,如果使用二次探测再散列法将这n个关键字存入哈希表,至少要进行(C)次探测
    A.n-1
    B.n
    C.n*(n+1)/2
    D.n(n+1)

    第一个元素需要探测1次,第二个元素需要探测2次,第n个元素需要探测n次
    故n个相同哈希值的元素需要探测n*(n+1)/2

    (4)下列选项中,不可能是快速排序第2趟排序结果的是(C)
    A.2,3,5,4,6,7,9
    B.2,7,5,6,4,3,9
    C.3,2,5,4,7,6,9
    D.4,2,3,5,7,6,9

    每进行一趟排序,都会使一个元素到达最终位置,因此当进行了两次快排之后,至少有两个元素到达最终位置
    C选项只有9到达了最终位置

    (5)堆排序平均执行的时间复杂度和需要附加的存储空间复杂度分别是(B)
    A.O(N) 和O(1)
    B.O(NlogN) 和O(1)
    C.O(NlogN)和 O(N)
    D.O(N) 和O(N)

    原地堆排序不需要额外的存储空间复杂度

    二、编程题

    2.1迷宫问题

    2.1.1 题目

    在这里插入图片描述

    2.1.2 题解

    思路:递归+回溯

    递归终止值:走到边界,出口或该点的四周都是墙
    具体步骤

    step1:path用来存储路径信息,map数组标记走过的点
    step2:依次判断当前点的上、下、左、右四个点是否可走,如果可走则递归走该点
    step3:回溯过程中,将该点标记为没有走过,并从路径中移除

    代码:

       public static void main(String[] args) {
            Scanner scanner = new Scanner(System.in);
           
            while (scanner.hasNextInt()) { 
                int n = scanner.nextInt();
                int m = scanner.nextInt();
    
                int[][] map = new int[n][m];
                for (int i = 0; i < n; i++) {
                    for (int j = 0; j < m; j++) {
                        map[i][j] = scanner.nextInt();
                    }
                }
    
                // 路径存储的数组
                List<Pos> path = new ArrayList<>();
                // DFS 搜索路径
                dfs(map, 0, 0, path);
                // 输出
                for (Pos p : path) {
                    System.out.println("(" + p.x + "," + p.y + ")");
                }
            }
        }
    
        // 返回值 标记是否找到可通行的路劲
        public static boolean dfs(int[][] map, int x, int y, List<Pos> path) {
            // 添加路径并标记已走
            path.add(new Pos(x, y));
            map[x][y] = 1;
            // 结束标志
            if (x == map.length - 1 && y == map[0].length - 1) {
                return true;
            }
            // 向下能走时
            if (x + 1 < map.length && map[x + 1][y] == 0) {
                if (dfs(map, x + 1, y, path)) {
                    return true;
                }
            }
            // 向右能走时
            if (y + 1 < map[0].length && map[x][y + 1] == 0) {
                if (dfs(map, x, y + 1, path)) {
                    return true;
                }
            }
            // 向上能走时
            if (x - 1 > -1 && map[x - 1][y] == 0) {
                if (dfs(map, x - 1, y, path)) {
                    return true;
                }
            }
            // 向左能走时
            if (y - 1 > -1 && map[x][y - 1] == 0) {
                if (dfs(map, x, y - 1, path)) {
                    return true;
                }
            }
            // 回溯
            path.remove(path.size() - 1);
            map[x][y] = 0;
            return false;
        }
        
        public static class Pos {
            int x;
            int y;
            public Pos(int x, int y) {
                this.x = x;
                this.y = y;
            }
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
  • 相关阅读:
    五年Java编程生涯,大专学历最终逆袭阿里,面试+学习+经历分享
    基于多尺度卷积神经网络特征融合的植株叶片检测技术
    前端基于Verdaccio搭建私有npm仓库,上传npm插件包,及下载使用自己的npm插件包
    高校计算机课件(一)NPM、PYPI、DockerHub 备份
    Spring中的jdbcTemplate模块操作数据库(MySQL)
    springboot爱护大自然的设计与实现毕业设计源码231643
    (附源码)springboot通用数据展示系统 毕业设计 200934
    MySQL之函数
    MySQL基础知识总结
    RMAN备份数据库_重启RMAN备份
  • 原文地址:https://blog.csdn.net/m0_60631323/article/details/127420251