刷题日记【第十二篇】-笔试必刷题【洗牌+MP3光标位置+年终奖+迷宫问题】

news2024/10/7 16:16:56

洗牌【编程题】

在这里插入图片描述

import java.util.*;

public class Main {
    // 左: i -->  2*i;
    // 右: i+n --> 2*i + 1;
    private static void playCard(int[] cards, int n, int k ) {
        for (int i = 0; i < k; i++) {
            //一次洗牌的顺序
            int[] newCards = new int[cards.length];
            //遍历编号为0-n-1
            for (int j = 0; j < n; j++) {
                newCards[2 * j] = cards[j];
                newCards[2 * j + 1] = cards[j + n];
            }
            cards = newCards;
        }
        //从上往下打印
        printCard(cards);
    }
    private static void printCard(int[] cards) {
        for (int i = 0; i < cards.length - 1; i++) {
            System.out.print(cards[i] + " ");
        }
        System.out.println(cards[cards.length - 1]);
    }
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        int group = scan.nextInt();
        for (int i = 0; i < group; i++) {
            //读入每组数据
            int n = scan.nextInt();
            int k = scan.nextInt();
            int[] arr = new int[2 * n];
            for (int j = 0; j < 2 * n; j++) {
                arr[j] = scan.nextInt();
            }
            //洗牌
            playCard(arr, n, k);
        }
    }
}

MP3光标位置【编程题】

在这里插入图片描述
在这里插入图片描述

import java.util.Scanner;
import java.io.*;
 
public class Main {
    private static void mouseMove(String numStr, String orderStr) {
        //歌曲数量
        int n = Integer.parseInt(numStr);
        //指令数组: ud
        char[] order = orderStr.toCharArray();
        //当前鼠标所在的位置
        int mouse = 1;
        //显示列表所在的起始位置
        int first = 1;
 
        //指令处理
        // n <= 4
        if(n <= 4) {
            for(int i = 0; i < order.length; i++) {
                if(mouse == 1 && order[i] == 'U') {
                    mouse = n;
                }else if(mouse == n && order[i] == 'D') {
                    mouse = 1;
                }else if(order[i] == 'U') {
                    mouse--;
                }else if(order[i] == 'D') {
                    mouse++;
                }
            }
            //输出
            //打印当前显示列表
            for(int i = 1; i < n; i++) {
                System.out.print(i + " ");
            }
            System.out.println(n);
            //打印当前歌曲
            System.out.println(mouse);
        } else {
            // n>4
            for (int i = 0; i < order.length; i++) {
                if(first == 1 && mouse == 1 && order[i] == 'U') {
                    first = n-3;
                    mouse = n;
                }else if (first == n-3 && mouse == n && order[i] == 'D') {
                    first = 1;
                    mouse = 1;
                }else if (first != 1 && mouse == first && order[i] == 'U') {
                    first--;
                    mouse--;
                    //屏幕显示的不是第一页时,光标在当前屏幕最后一首歌时,按Down键显示下一首歌,这里要注意,如果是最后一页的话,按D就会到第一首歌
                }else if (first != n-3 && mouse == first+3 && order[i] == 'D') {
                    first++;
                    mouse++;
                    //其他情况只移动光标
                }else if (order[i] == 'U') {
                    mouse--;
                }else if (order[i] == 'D') {
                    mouse++;
                }
            }
            //输出
            //打印当前显示列表
            for(int i = first; i < first+3; i++) {
                System.out.print(i + " ");
            }
            System.out.println(first+3);
            //打印当前歌曲
            System.out.println(mouse);
        }
    }
    public static void main(String[] args) throws Exception{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String numStr;
        while((numStr = br.readLine()) != null) {
            String orderStr = br.readLine();
            mouseMove(numStr,orderStr);
        }
    }
}

年终奖【编程题】

在这里插入图片描述

    public int getMost(int[][] board) {
        int row = board.length;
        int col = board[0].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++) {
                board[i][j] += Math.max(board[i-1][j],board[i][j-1]);
            }
        }
        return board[row-1][col-1];
    }

迷宫问题【编程题】

在这里插入图片描述

import java.util.*;
 
 
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 scan = new Scanner(System.in);
        int row = scan.nextInt();
        int col = scan.nextInt();
        //创建迷宫
        int[][] mat = new int[row][col];
        for (int i = 0; i < row; i++) {
            for (int j = 0; j < col; j++) {
                mat[i][j] = scan.nextInt();
            }
        }   
        //搜索路径
        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 + ")");
        }
    }
 
    //matL迷宫矩阵: row行 row列
    // x,y:当前位置
    // book:标记矩阵,标记当前位置是否走过
    // path:保存当前路径的每一个位置
    // minPath:保存最短路径
    private 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;//回退了,表示没有走过,改为0
    }
}

1. 堆是从任意结点出发到根路径上所经过的结点序列按其关键字有序【大根堆/小根堆】

在这里插入图片描述
A:二叉排序树(BST):

  • 如果左子树不空,那么左子树上所有结点的值均小于根结点。
  • 如果右子树不空,那么右子树上所有结点的1值均大于根结点。

B:哈夫曼树:

  • 带权值的树

C:AVL树:【平衡二叉查找树】

  • 树中任意结点的两个子树高度最大差为1,那么这棵树就是高度平衡树

D:堆:

  • 分为大根堆-小根堆
  • 如果是大根堆(小根堆),堆中所有结点都满足:根结点大于(小于)左右孩子结点。
    由四个选项的特点可以看出,二叉排序树只在根结点处有序,其余子节点无序,所以pass A选项;哈夫曼树是无序的;AVL树也是无序的;只有D选项属于根结点有序,子节点有序,所以选择D。

2.将整数数组(7-6-3-5-4-1-2)按照堆排序的方式原地进行升序排列,请问在第一轮排序结束之后,数组的顺序是(C)

在这里插入图片描述
在这里插入图片描述

3.排序方法的最坏时间复杂度

堆排序最坏情况时间下的时间复杂度为 O(nlog2n) ;

希尔排序最坏情况时间下的时间复杂度为 O(n1.5) ;

快速排序、冒泡排序最坏情况时间下的时间复杂度为O(n2) 。

4.HASH 函数冲突处理方式

A 开放定址法
B 链地址法
C 插入排序法

5.二叉排序树特点

B)二叉排序树可以得到一个从小到大的有序序列。
A 先序遍历
B 中序遍历
C 后序遍
D 层次遍历
  • 二叉排序树(BST):

  • 如果左子树不空,那么左子树上所有结点的值均小于根结点。

  • 如果右子树不空,那么右子树上所有结点的1值均大于根结点。

可以看出二叉排序树属于 左小右大,所以中序遍历就可以完成从小到大的有序序列

6.快排确定第几趟排序结果,要看有几个数满足左边大右边小的条件

在这里插入图片描述
在这里插入图片描述

7.堆排序平均执行的时间复杂度和需要附加的存储空间复杂度分别是(B)

A O(N2)O(1)
B O(Nlog2N)O(1)
C O(Nlog2N)O(N)
D O(N2)O(N)

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/27861.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Servlet】2:认识一下Web服务器——Tomcat

目录 第三章 | Tomcat 认识与配置 | 章节概述 | HTTP服务器概述 | Tomcat 安装与配置 | Tomcat 的目录结构、端口号 第四章 | Tomcat 基本使用 | 章节概述 | 本地Tomcat 静态资源网站访问 | IDEATomcat 静态资源网站访问 | IDEA中最基础web项目的目录结构 本文章属于后…

从零开始操作系统-07:APIC

这一节主要主要是APIC。 所需要的文件在Github&#xff1a;https://github.com/yongkangluo/Ubuntu20.04OS/tree/main/Files/Lec7-ExternalInterrupt 历史方法&#xff1a;PIC&#xff08;Programmable Interrupt Controller&#xff09; Intel 8259&#xff1a; APIC&#…

小侃设计模式(十三)-策略模式

1.概述 策略模式&#xff08;Strategy Pattern&#xff09;是一种比较简单的模式&#xff0c;它定义了算法家族&#xff0c;分别封装起来&#xff0c;让它们之间可以互相替换&#xff0c;此模式让算法的变化&#xff0c;不会影响到使用算法的客户。策略模式具有较强的实用性&a…

ARM学习扫盲篇(一):CPSRSPSR、LcacheDcache、w/parityw/ECC

1、CPSR&SPSR CPSR—程序状态寄存器(current program status register) SPSR—程序状态保存寄存器&#xff08;saved program status register&#xff09; Icache&Dcache icache用来缓存指令&#xff1b; dcache用来缓存数据&#xff0c;dcache用的前提是mmu要启动…

(续)SSM整合之SSM整合笔记(ContextLoaderListener)(P177-178)

目录 ContextLoaderListener 一 ContextLoaderListener 二 测试ContextLoaderListener 1 新建模块spring_listener com.atguigu 2. 导入依赖 3 .转web 4 .web.xml 5 springmvc.xml 6 .spring.xml 7 首页index.html 8 控制层 HelloController 9 service接口…

【24计算机考研】备考前必须了解的避坑小知识,建议收藏

前言 我们可能已经了解到最近两三年的考研趋势&#xff0c;疫情的原因&#xff0c;不断增加的二战三战考生&#xff0c;导致每年考研人数持续增长&#xff0c;那么&#xff0c;如何在相同的时间里&#xff0c;赶超你的竞争对手&#xff0c;避坑 绝对是很重要的。 考研将是一场…

【Spring】——9、如何指定初始化和销毁的方法?

&#x1f4eb;作者简介&#xff1a;zhz小白 公众号&#xff1a;小白的Java进阶之路 专业技能&#xff1a; 1、Java基础&#xff0c;并精通多线程的开发&#xff0c;熟悉JVM原理 2、熟悉Java基础&#xff0c;并精通多线程的开发&#xff0c;熟悉JVM原理&#xff0c;具备⼀定的线…

(STM32)从零开始的RT-Thread之旅--SPI驱动ST7735(3)使用DMA

上一篇&#xff1a; (STM32)从零开始的RT-Thread之旅--SPI驱动ST7735(2) 上一篇完成了ST7735驱动的移植&#xff0c;并已经可以通过SPI在屏幕上显示字符了&#xff0c;这一章会把SPI修改为DMA的传输方式。由于RTT对于STM32H7的SPI的DMA传输方式目前支持的并不好&#xff0c;这…

Vuex3使用教程(待续)

Vuex定义 以下是Vue官网对于Vuex的定义&#xff1a; Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式 库。它采用集中式存储管理应用的所有组件的状态&#xff0c;并以相应的规则保证状态以一种可预测的方式发生变化。 从官方定义上看&#xff1a; Vuex提供了一个全部组件…

Java注释:单行、多行和文档注释

注释是对程序语言的说明&#xff0c;有助于开发者和用户之间的交流&#xff0c;方便理解程序。注释不是编程语句&#xff0c;因此被编译器忽略。 Java入门基础视频教程&#xff0c;java零基础自学就选黑马程序员Java入门教程&#xff08;含Java项目和Java真题&#xff09; Ja…

【Django】Django4.1.2使用xadmin避坑指南(二)

上一篇【Django】Django4.1.2使用xadmin避坑指南调完后&#xff0c;还是继续有问题&#xff0c;没事&#xff0c;咱们继续&#xff0c;必须啃下硬骨头~ 文章目录环境问题一&#xff1a;if not ContentType._meta.installed:这一句报错&#xff1a;AttributeError: Options obje…

《深度学习进阶 自然语言处理》第八章:Attention介绍

文章目录8.1 Attention结构8.1.1 seq2seq存在的问题8.1.2 编码器的改进8.1.3 解码器的改进8.2 Attention的应用8.3 总结之前文章链接&#xff1a; 开篇介绍&#xff1a;《深度学习进阶 自然语言处理》书籍介绍 第一章&#xff1a;《深度学习进阶 自然语言处理》第一章&#xf…

SSH连接WSL2踩坑记录与增加端口转换规则,实现外网与WSL2的连接

SSH连接WSL2踩坑记录 文章目录SSH连接WSL2踩坑记录1. 在WSL里的操作2. ssh连接3. 可能出现的错误4. 再配置端口转发到WSL1. 在WSL里的操作 1.1 重装openssh-server sudo remove openssh-server # 如果已经安装了&#xff0c;建设先卸载 sudo apt install openssh-server…

Ansys Lumerical | 行波 Mach-Zehnder 调制器仿真分析

前言 本示例描述了行波 Mach-Zehnder 调制器的完整多物理场&#xff08;电气、光学、射频&#xff09;仿真&#xff0c;最后在INTERCONNECT中进行了紧凑模型电路仿真。计算了相对相移、光学传输、传输线带宽和眼图等关键结果。 综述 此示例中5毫米长的Si波导由5毫米长的Al共面…

SpringBoot SpringBoot 开发实用篇 5 整合第三方技术 5.24 SpringBoot 整合 RabbitMQ(topic 模式)

SpringBoot 【黑马程序员SpringBoot2全套视频教程&#xff0c;springboot零基础到项目实战&#xff08;spring boot2完整版&#xff09;】 SpringBoot 开发实用篇 文章目录SpringBootSpringBoot 开发实用篇5 整合第三方技术5.24 SpringBoot 整合 RabbitMQ(topic 模式)5.24.1 …

FL Studio2023水果编曲软件最新版安装教程

FL Studio中文版是知名的音乐制作软件&#xff0c;让你的计算机就像是全功能的录音室&#xff0c;软件包含13种虚拟音源&#xff0c;可同时录制64轨音频轨&#xff0c;FL Studio中文版拥有的漂亮的大混音盘&#xff0c;先进的创作工具&#xff0c;让你的音乐突破想象力的限制&a…

智能化油田建设规划

一、数字化油田-技术现状 数字化油田实现了设备的远程生产过程监控&#xff0c;使井场实现无人值守。所以目前的设备运行维护管理系统只能实现数据统计管理&#xff0c;并不能实现设备状态监控及远程维护及故障诊断。 1、数字化油田— 存在的问题 缺少设备状态在线监测系统&a…

第三章. 业务功能开发--用户登录安全退出

第三章. 业务功能开发--用户登录安全退出 1. 用户登录 需求&#xff1a; 用户在登录页面,输入用户名和密码,点击"登录"按钮或者回车,完成用户登录的功能.*用户名和密码不能为空*用户名或者密码错误,用户已过期,用户状态被锁定,ip受限 都不能登录成功*登录成功之后,所…

Android Jetpack之Lifecycle的使用及源码分析

Lifecycle生命周期感知型组件可执行操作来响应另一个组件&#xff08;如 Activity 和 Fragment&#xff09;的生命周期状态的变化。这些组件有助于您编写出更有条理且往往更精简的代码&#xff0c;此类代码更易于维护。 尤其是在Activity和Fragment在已经默认支持LifeCycle的情…

【第五部分 | JS WebAPI】3:DOM 节点操作

目录 | 节点操作 1-1 概述 2-1 获取父节点 3-1 获取子节点&#xff08;获取所有子对象 不推荐&#xff09; 3-2 获取子节点&#xff08;获取所有子【元素节点】&#xff09; 3-3 获取首尾子节点 4-1 获取兄弟节点 5-1 动态创建、添加节点 5-2 案例&#xff1a;评论区 …