2023HW部分笔试题

题目来源:卡码网

136. 字符串处理器

问题描述

时间限制:1.000S 空间限制:256MB

题目描述

产品代码需要设计一个带游标的字符串处理器,它需要实现以下功能:

插入:在游标所在处添加文本,其对应操作为 insert str,insert 表示插入操作命令关键字 (区分大小写),str 表示待操作的字符串,insert 操作执行后将 str 拼接到游标当前位置,同时游标移动到 str 的右边;

删除:在游标所在处删除文本,其对应操作为 delete len,delete 表示删除操作命令关键字(区分大小写),len 为整数,表示删除游标左边字符串的长度,此时 len 要求大于等于 0,如果len大于游标所在处左侧字符串长度,认为输入命名非法,不做任何处理;

移动:将游标往左或者往右移动,其对应操 move cnt,move 表示游标移动操作命令关键字(区分大小写),cnt 为整数,表示游标移动次数,cnt 如果为负数时表示向左移动 cnt 次,如果为正数表示向右移动 cnt 次数,如果 cnt 等于 0,则表示游标不移动,如果移动次数 cnt 超过字符串左右边界则认为输入命名非法,不做任何处理;

复制:将游标左边字符串复制并插入到游标的右边,游标位置不变(如果游标右边有字符,复制插入到游标和原有字符中间),其对应操作为 copy,copy 表示复制操作命令关键字(区分大小写);

输入描述

支持输入多行,每个仅支持输入一个操作命令,当输入 end 结束操作命令关键字(区分大小写)时则代表操作停止。

首次执行时字符串处理器内部字符串为空,游标位置索引为 0,此时字符串处理器序列化结果为 1。

1 <= str.length<= 40

1 <= len<= 40

-40 <= cnt <= 40

调用 insert,delete,move 和copy 的总次数不超过 200 次。

输出描述

当前字符串处理器的序列化结果,游标使用“|”来表示。

输入示例

insert test
insert hellohuawei
move -6
delete 5
insert practice
copy
end

输出示例

testpractice|testpracticehuawei

解题思路与代码实现

思路:模拟字符串操作过程

代码实现:

import java.util.Map;
import java.util.Scanner;
import java.util.HashMap;public class Main {static StringBuilder builder = new StringBuilder();static int index = 0;// 游标处插入字符串static void insert(String str) {if (str == null || str.isEmpty()) {  // 字符串为空return;}builder.insert(index, str);index += str.length();}// 删除游标左侧len个字符static void delete(int len) {if (len < 0 || len > index) {    // 非法输入return;}int start = index - len;    // 删除左边区间部分字符builder.delete(start, index);index -= len;}// 移动游标static void move(int cnt) {int newPos = index + cnt;// 判断新位置是否越界if (newPos < 0 || newPos > builder.length()){return;}index = newPos; // 更新游标}// 复制游标左侧子串static void copy(){String leftStr = builder.substring(0,index);builder.insert(index,leftStr);// 游标位置不变}public static void main(String[] args) {Scanner in = new Scanner(System.in);// ACM输入while (true) {String command = in.next();if (command.equals("end")) {builder.insert(index, '|');// ACM输出System.out.println(builder.toString());break;} else if (command.equals("insert")) {String str = in.next();insert(str);}else if (command.equals("delete")) {int len = in.nextInt();delete(len);}else if (command.equals("move")) {int cnt =in.nextInt();move(cnt);}else {copy();}}}
}

题目来源:卡码网

137. 消息传输

问题描述

时间限制:1.000S 空间限制:256MB

题目描述

在给定的 m x n (1 <= m, n <= 1000) 网格地图 grid 中,分布着一些信号塔,用于区域间通信。

每个单元格可以有以下三种状态:

值 0 代表空地,无法传递信号;

值 1 代表信号塔 A,在收到消息后,信号塔 A 可以在 1ms 后将信号发送给上下左右四个方向的信号塔;

值 2 代表信号塔 B,在收到消息后,信号塔 B 可以在 2ms 后将信号发送给上下左右四个方向的信号塔。

给定一个坐标 (j, k),输入保证坐标 (j, k) 位置一定有信号塔。在坐标 (j, k) 位置的信号塔触发一个信号。

要求返回网格地图中所有信号塔收到信号的最短时间,单位为 ms。如果有信号塔无法收到信号,则返回 -1。

输入描述

第一行:网格的列数 n。

第二行:网格的行数 m。

第三行:触发信号的信号塔坐标 (j, k)。

接下来的 m 行:每行包含 n 个整数,表示该行网格中每个位置的信号塔安装信息(通过空格间隔每个状态值)。

输出描述

输出返回 网格地图中所有信号塔收到信号的最小时间,单位为ms。如果不可能,返回-1。

输入示例

3
3
1 0
0 1 2
1 2 1
0 1 2

输出示例

4

解题思路与代码实现

思路:BFS搜索

代码实现:

import java.util.Arrays;
import java.util.Comparator;
import java.util.PriorityQueue;
import java.util.Scanner;public class Main {static int[][] directions = {{-1, 0}, {1, 0}, {0, -1}, {0, 1}};   // 方向数组public static void main(String[] args) {Scanner in = new Scanner(System.in);// ACM输入int n = in.nextInt();   // 列数int m = in.nextInt();   // 行数int startX = in.nextInt(), startY = in.nextInt();    // 起点坐标int[][] grid = new int[m][n];   // 地图for (int i = 0; i < m; i++) {for (int j = 0; j < n; j++) {grid[i][j] = in.nextInt();}}// 处理// 辅助优先队列,存储数组,每个数组依次存储横坐标x、纵坐标y和起点(startX,startY)到(x,y)的最短耗时PriorityQueue<int[]> priorityQueue = new PriorityQueue<>(Comparator.comparingInt(o -> o[2]));boolean[][] visited = new boolean[m][n]; // 辅助标记数组数组,visited[i][j]表示(i,j)位置已访问过int[][] dist = new int[m][n]; // 辅助数组,dist[i][j]表示(i,j)到(startX,startY)的最短耗时// 初始化dist数组for (int i = 0; i < dist.length; i++) {Arrays.fill(dist[i], Integer.MAX_VALUE);}dist[startX][startY] = 0;   // 起点位置耗时置0priorityQueue.offer(new int[]{startX, startY, 0});    // 起点入队while (!priorityQueue.isEmpty()) { // BFSint[] item = priorityQueue.poll();  // 队头元素出队int x = item[0], y = item[1], currentTime = item[2];visited[x][y] = true;   // 标记队头元素已访问for (int i = 0; i < directions.length; i++) {int newX = x + directions[i][0];int newY = y + directions[i][1];// 判断是否越界if (newX < 0 || newX >= m || newY < 0 || newY >= n) {continue;}// 判断是否是未曾访问过的信号塔if (!visited[newX][newY] && grid[newX][newY] != 0) {int newTime = currentTime + grid[x][y];if (newTime < dist[newX][newY]){  // 找到了耗时更少的路径,需要更新dist数组dist[newX][newY] = newTime;  // 更新耗时priorityQueue.offer(new int[]{newX, newY, dist[newX][newY]});}}}}// ACM输出,需要先判断是否所有信号塔都能收到信号int res = Integer.MIN_VALUE;// 选出dist数组所有信号塔的耗时最大值for (int i = 0; i < m; i++) {for (int j = 0; j < n; j++) {if (grid[i][j] != 0) {if (!visited[i][j]) {    // bfs之后仍然有信号塔未被访问System.out.println(-1);return;}res = Math.max(res, dist[i][j]);    // 更新res为dist数组中对应信号塔的最大值}}}System.out.println(res);}
}

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

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

相关文章

AI时代,你的工作会被AI替代吗?

AI在不同领域的应用和发展速度是不同的。在智商方面&#xff0c;尤其是在逻辑推理、数据分析和模式识别等领域&#xff0c;AI已经取得了显著的进展。例如&#xff0c;在国际象棋、围棋等策略游戏中&#xff0c;AI已经能够击败顶尖的人类选手。在科学研究、医学诊断、股市分析等…

一分钟彻底掌握Java枚举

在Java编程语言中&#xff0c;枚举&#xff08;Enum&#xff09;是一种特殊的类&#xff0c;它包含了一组固定的常量。枚举常用于表示固定数量的常量值&#xff0c;例如一周的七天、四个基本方向&#xff08;东、南、西、北&#xff09;等。 0.浅显理解 枚举就像是一个特殊的…

STM32 SWD烧写

最小电路 stm32f103x 内部已经集成了振荡电路&#xff0c;可以省略&#xff1b;rst引脚电路&#xff0c;可以省略&#xff0c;boot0,boot1不需要设置 正常烧录 -------------------------------------------------------------------STM32CubeProgrammer v2.9.0 …

使用 go-control-plane 自定义服务网格控制面

写在前面 阅读本文需要最起码了解envoy相关的概念 本文只是一个类似于demo的测试&#xff0c;只为了学习istio&#xff0c;更好的理解istio中的控制面和数据面&#xff08;pilot -> proxy&#xff09;是如何交互的&#xff0c;下图的蓝色虚线 先说go-control-plane是什么…

nginx 1024 worker_connections are not enough while connecting to upstream

现象 请求api响应慢&#xff0c;甚至出现504 gateway timeout&#xff0c;重启后端服务不能恢复&#xff0c;但重启nginx可以恢复。 解决方案 worker_connections使用了默认值 1024&#xff0c;当流量增长时&#xff0c;导致连接不够 在nginx.conf中修改连接数就可以了&…

小白学python(第四天)顺序与分支篇

这几天因为个人原因&#xff0c;python篇会更新比较慢&#xff0c;还望大家谅解&#xff0c;那么废话不多说&#xff0c;我们现在就进入正题 顺序篇 这个没啥好说的&#xff0c;就是自上而下&#xff0c;依次执行 分支篇 条件&#xff08;if&#xff09;语句语法格式&#…

【车载开发系列】瑞萨RH850单片机入门

【车载开发系列】瑞萨RH850单片机入门 【车载开发系列】瑞萨RH850单片机入门 【车载开发系列】瑞萨RH850单片机入门一. 瑞萨RH850概念二. 瑞萨RH850分类三. 瑞萨RH850的应用领域四. RH850和ARM的区别五. RH850内存概念1. Flash存储器2. RAM&#xff08;随机访问存储器&#xff…

【C++】————string基础用法及部分函数底层实现

作者主页&#xff1a; 作者主页 本篇博客专栏&#xff1a;C 创作时间 &#xff1a;2024年6月30日 前言&#xff1a; 本文主要介绍STL容器之一 ---- string&#xff0c;在学习C的过程中&#xff0c;我们要将C视为一个语言联邦&#xff08;摘录于Effective C 条款一&#x…

实验6 形态学图像处理

1. 实验目的 ①掌握数字图像处理中&#xff0c;形态学方法的基本思想&#xff1b; ②掌握膨胀、腐蚀、开运算、闭运算等形态学基本运算方法&#xff1b; ③能够利用形态学基本运算方法&#xff0c;编程实现图像去噪&#xff0c;边界提取等功能。 2. 实验内容 ①调用Matlab /…

C语言 统计字符类型个数

这个程序读取用户输入的一行字符&#xff0c;并统计其中的英文字母、空格、数字和其他字符的个数。 #include <stdio.h> #include <ctype.h>int main() {char ch;int letters 0, spaces 0, digits 0, others 0;printf("输入一行字符: ");// 逐字符读…

PMBOK® 第六版 结束项目或阶段

目录 读后感—PMBOK第六版 目录 不论是阶段的收尾还是项目整体的收尾&#xff0c;都应是令人振奋的事。然而&#xff0c;在实际生活中&#xff0c;收尾工作却相当艰难。会遭遇负责人调离、换任&#xff0c;导致不再需要已购产品&#xff1b;项目收尾时对照招标文件或合同&…

51-61 CVPR 2024 最佳论文 | Rich Human Feedback for Text-to-Image Generation

23年12月&#xff0c;加州大学圣地亚哥、谷歌研究院、南加州大学、剑桥大学联合发布Rich Human Feedback for Text-to-Image Generation论文。 作者受大模型中RLHF技术的启发&#xff0c;用人类反馈来改进Stable Diffusion等文生图模型&#xff0c;提出了先进的RichHF-18K数据…

足球虚拟越位线技术FIFA OT(一)

此系列文章用于记录和回顾开发越位线系统的过程&#xff0c;平时工作较忙&#xff0c;有空时更新。 越位线技术 越位技术已被用于图形化分析足球中潜在的越位情况。 自 2018 年将视频助理裁判 &#xff08;VAR&#xff09; 引入比赛规则以来&#xff0c;人们越来越关注准确确…

完美世界|单机版合集(共22个版本)

前言 我是研究单机的老罗&#xff0c;今天给大家带来的是完美世界的单机版合集&#xff0c;一共22个版本。本人亲自测试了一个版本&#xff0c;运行视频如下&#xff1a; 完美世界|单机版合集 先看所有的版本的文件&#xff0c;文件比较大&#xff0c;准备好空间&#xff0c;差…

C#高级语法之特性

自定义特性和使用 什么是特性 特性&#xff08;attribute&#xff09;是一种允许我们向程序的程序集增加元数据的语言结构&#xff0c;它是用于保存程序结构信息的某种特殊类型的类。 将应用了特性的程序结构叫做目标设计用来获取和使用元数据的程序&#xff08;对象浏览器&a…

Transformer详解encoder

目录 1. Input Embedding 2. Positional Encoding 3. Multi-Head Attention 4. Add & Norm 5. Feedforward Add & Norm 6.代码展示 &#xff08;1&#xff09;layer_norm &#xff08;2&#xff09;encoder_layer1 最近刚好梳理了下transformer&#xff0c;今…

【VScode】常用配置

1.indenticator 增加白色竖条&#xff0c;显示方法范围 2.Git Graph 给git变换分支增添颜色区分 3.Vue 系列 vue 系列&#xff1a;给纯白色代码添加 颜色区分 3.eslint eslint警告&#xff0c;比如{ } 只写了半个会标红提示错误 等错误信息提示 需要配置js等页面 非下…

1.linux操作系统CPU负载

目录 概述CPU平均负载查看平均负载结束 概述 CPU 使用率 和CPU 平均使用率。 CPU平均负载 单位时间内系统处于 [可运行状态] 和 [不可中断状态] 的平均进程数&#xff0c;就是平均活跃进程数&#xff0c;和CPU使用率并没有直接关系 可运行状态 正在使用CPU或者正等待CPU的进…

【Elasticsearch】linux使用supervisor常驻Elasticsearch,centos6.10安装 supervisor

背景&#xff1a; linux服务器&#xff0c;CentOS 6操作系统&#xff0c;默认版本python2.6.6&#xff0c;避免安装过多的依赖不升级python 在网上查的资料python2.6.6兼容supervisor版本 3.1.3 安装supervisor 手动在python官网下载supervisor&#xff0c;并上传到服务器 下…

量化交易心法——如何建立自己的算法交易事业

量化交易,也称算法交易,是严格按照将计算机算法程序给出的买卖决策进行的证券交易。 一、 什么人适合成为量化交易员 做量化交易并不一定需要特别高的学历,只要具备一定的金融学以及统计学知识,有一定的经济基础,不需要用交易的收益来维持日常生活,因为并不是很快就能找…