分享两道Java面试的算法上机题目(后续会持续补充更多)

news/2025/2/12 2:55:43/

所有题目参考答案均是小编自己想法,仅供参考,解法很多,大可不必局限,有更优解的大神无解,可评论或私聊博主指正!

题目1

找大串,给定一个字符串其中包含任意组连续字符,我们把超过3个连续相同字符的组合称作为大串,请找出他们的起止位置。如:“叽叽汪汪汪喵喵喵喵渣渣”可分为“叽叽”、“汪汪汪”、“喵喵喵喵 ”、“喳喳”,其中“汪汪汪”和“喵喵喵喵”为大串组。请根据下面提示代码,给出完整思路代码。

public class test1 {public static void main(String[] args) {// 期望的输出为 [[2,4]]System.out.println(run("这是啊啊啊呀"));// 期望的输出为 [[2,4],[5,8]]System.out.println(run("叽叽汪汪汪喵喵喵喵喳喳"));}/*** 找出输入字符串中连续3个以上相同字符的起始和结束位置* @param input 输入字符串*/private static List<List<Integer>> run(String input) {// TODO 在这里实现代码}
}

参考答案 

import java.util.ArrayList;
import java.util.List;/*** @Author:Yunnuo* @Email: ymz@ebox.vip* @Date:2023/8/11 14:14* @Description:*/
public class Test1 {public static void main(String[] args) {// 期望的输出为 [[2,4]]System.out.println(run("这是啊啊啊呀"));// 期望的输出为 [[2,4],[5,8]]System.out.println(run("叽叽汪汪汪喵喵喵喵喳喳"));}/*** 找出输入字符串中连续3个以上相同字符的起始和结束位置* @param input 输入字符串*/private static List<List<Integer>> run(String input) {List<List<Integer>> result = new ArrayList<>();int start = 0;int end = 0;while (end < input.length()) {if (input.charAt(start) == input.charAt(end)) {end++;} else {if (end - start >= 3) {List<Integer> interval = new ArrayList<>();interval.add(start);interval.add(end - 1);result.add(interval);}start = end;}}// 结束if (end - start >= 3) {List<Integer> interval = new ArrayList<>();interval.add(start);interval.add(end - 1);result.add(interval);}return result;}
}

题目2

NASA派出的一个机器人小车分队已经成功着陆火星,出乎意料的是摆在这些小车面前的是一个十分规矩的矩形平原,操作员需要通过远程发送指令序列来控制这些小车移动,在移动的过程中小车上的高清摄像机会将整个平原的地形图完整记录并返回给地球,为了方便导航,我们将平原看成一个二维坐标面,x轴正方向为东,y轴正方向为北,矩形平原的最左下角坐标为(0,0),这样小车的方位便可以使用(x坐标,y坐标,面向方位)来表示,如(0,0,N)表示小车位于平原的左下角并且面向北,操作员可以用指令L,R和M。L和R可以让小车向左或向右旋转90度而不移动,M可以让小车向所面向的方向方位前进一个单位而不改变方向,你需要编写一个程序来计算小车最终的位置与方位,要求用面向对象的思想解决这个问题,你可以参考以下代码片段实现:

public static void main(String[] args) {// 控制器RoverCoordinator roverCoordinator = new RoverCoordinator();// 平面右上角的坐标xroverCoordinator.setMaxX(5);// 平面右上角的坐标yroverCoordinator.setMaxY(5);// 第一辆小车的数据Rover rover1 = new Rover(1,1,2,"N");roverCoordinator.addRover(rover1);// 第二辆小车的数据Rover rover2 = new Rover(2,3,3,"E");roverCoordinator.addRover(rover2);// 通过协调器给小车1发指令roverCoordinator.action(rover1.getId(),"LMLMLMLMM");// 通过协调器给小车2发指令roverCoordinator.action(rover2.getId(),"MMRMMRMRRM");System.out.println(rover1);System.out.println(rover2);}public cless Rover {/*** 小车id*/private int id;/*** 小车坐标x值*/private int x;/*** 小车坐标y值*/private int y;/*** 小车面向方位*/private String direction;public Rover(int id, int x, int y, String direction) {this.id = id;this.x = x;this.y = y;this.direction = direction;} /*** 小车执行单个指令* @param command 指令*/public void action(char command) {// TODO 你的代码}
}public class RoverCoordinator {/*** 所有已注册小车*/private Map<Integer,Rover> roverMap;/*** 地图最大x值*/private int maxX;/*** 地图最大y值*/private int maxY;public RoverCoordinator(){roverMap = new HashMap<>();}public void addRover(Rover rover){roverMap.put(rover.getId(),rover);checkOutOfRange();}/*** 操控指定的小车完成指令序列,同时检查越界问题* @param id 小车ID* @param commandSequence 指令序列*/public void action(int id,String commandSequence){}/*** 判断小车是否越界*/private void checkOutOfRange() {}}

参考答案

RoverCoordinator类

import lombok.Data;import java.util.HashMap;
import java.util.Map;/*** @Author:Yunnuo* @Email: ymz@ebox.vip* @Date:2023/8/11 14:34* @Description: 小车协调通器*/
@Data
public class RoverCoordinator {/*** 所有已注册小车*/private Map<Integer,Rover> roverMap;/*** 地图最大x值*/private int maxX;/*** 地图最大y值*/private int maxY;public RoverCoordinator(){roverMap = new HashMap<>();}public void addRover(Rover rover){roverMap.put(rover.getId(),rover);checkOutOfRange();}/*** 操控指定的小车完成指令序列,同时检查越界问题* @param id 小车ID* @param commandSequence 指令序列*/public void action(int id,String commandSequence){Rover rover = roverMap.get(id);if (rover != null) {for (char command : commandSequence.toCharArray()) {executeCommand(rover, command);checkOutOfRange();}}}private void executeCommand(Rover rover, char command) {if (command == 'L') {rover.turnLeft();} else if (command == 'R') {rover.turnRight();} else if (command == 'M') {rover.move();}}/*** 判断小车是否越界*/private void checkOutOfRange() {for (Rover rover : roverMap.values()) {if (rover.getX() < 0 || rover.getX() > maxX || rover.getY() < 0 || rover.getY() > maxY) {throw new RuntimeException("Rover " + rover.getId() + " 出界了!");}}}
}

Rover类

import lombok.Data;/*** @Author:Yunnuo* @Email: ymz@ebox.vip* @Date:2023/8/11 14:33* @Description:*/
@Data
public class Rover {/*** 小车ID*/private int id;/*** 小车x坐标*/private int x;/*** 小车y坐标*/private int y;/*** 小车面向方位*/private Direction direction;public Rover(int id, int x, int y, String direction) {this.id = id;this.x = x;this.y = y;this.direction = Direction.valueOf(direction);}public void turnLeft() {switch (direction) {case N:direction = Direction.W;break;case E:direction = Direction.N;break;case S:direction = Direction.E;break;case W:direction = Direction.S;break;}}public void turnRight() {switch (direction) {case N:direction = Direction.E;break;case E:direction = Direction.S;break;case S:direction = Direction.W;break;case W:direction = Direction.N;break;}}public void move() {switch (direction) {case N:y++;break;case E:x++;break;case S:y--;break;case W:x--;break;}}@Overridepublic String toString() {return "Rover " + id + ": (" + x + ", " + y + ", " + direction + ")";}
}
enum Direction {N, E, S, W
}

 


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

相关文章

Linux内核学习(七)—— 定时器和时间管理(基于Linux 2.6内核)

目录 一、内核中的时间概念 二、节拍率&#xff1a;HZ 实时时钟 系统定时器 三、定时器 系统定时器是一种可编程硬件芯片&#xff0c;能以固定频率产生定时器中断&#xff0c;它所对应的中断处理程序负责更新系统时间&#xff0c;也负责执行需要周期性运行的任务。 一、内…

HTML <table> 标签

实例 一个简单的 HTML 表格,包含两行两列: <table border="1"><tr><th>Month</th><th>Savings</th></tr><tr><td>January</td><td>$100</td></tr> </table>定义和用法 &l…

Vue2学习笔记のVue组件化编程

目录 Vue组件化编程非单文件组件基本使用几个注意点组件的嵌套VueComponent一个重要的内置关系 单文件组件index.htmlmain.jsApp.vueSchool.vueStudent.vue 各位小伙伴们好呀&#xff0c;不知道上一篇文章你是否有收获&#xff01;这篇是Vue2学习笔记第二篇&#xff0c;也是Vue…

CF 896 C Willem, Chtholly and Seniorious(珂朵莉树模板)

CF 896 C. Willem, Chtholly and Seniorious(珂朵莉树模板) Problem - C - Codeforces 大意&#xff1a;给出一个区间 &#xff0c; 要求进行四种操作 &#xff0c; 区间加 &#xff0c; 区间第k大 &#xff0c; 区间推平 &#xff0c; 区间求和。 珂朵莉树模板题 &#xff…

【C++】unordered_map和unordered_set的使用 及 OJ练习

文章目录 前言1. unordered系列关联式容器2. map、set系列容器和unordered_map、unordered_set系列容器的区别3. unordered_map和unordered_set的使用4. set与unordered_set性能对比5. OJ练习5.1 在长度 2N 的数组中找出重复 N 次的元素思路分析AC代码 5.2 两个数组的交集思路分…

AS中回退git历史版本并删除历史提交记录

当您想把某个版本后的代码删除&#xff0c;回滚到指定的版本。可以使用一下的方法。 一、打开AS中git历史提交窗口 二、选择需要回滚的版本选项&#xff0c;右键弹出菜单。选择Reset Current Branch to Here... 三、选择 Hard 选项 soft&#xff1a;将合并的更改应用到当前分支…

类的加载器及类加载过程

1、类加载器子系统作用 类加载器子系统负责从文件系统或者网络中加载Class文件&#xff0c;class文件在文件开头有特定的文件标识。ClassLoader只负责class文件的加载&#xff0c;至于它是否可以运行&#xff0c;则由Execution Engine决定。加载的类信息存放于一块称为方法区的…

取模运算符在数组下标的应用

什么是取模运算符%&#xff1f; 定义&#xff1a; a mod b&#xff0c;设a、b属于正整数且b>0&#xff0c;如果q、r属于正整数满足aq*br&#xff0c;且0≤r<b&#xff0c;则定义&#xff1a; a mod b r 注意&#xff1a;取模运算符两侧的除数和被除数都是整数&#xff…