ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

华为OD机试 - 智能广播合并台号 - 数组(Java 新系统 100分)

华为OD机试 - 智能广播合并台号 - 数组(Java 新系统 100分) 华为OD机试 新系统 题库疯狂收录中刷题点这里专栏导读本专栏收录于《华为OD机试JAVA真题》。刷的越多抽中的概率越大私信哪吒备注华为OD加入华为OD刷题交流群每一题都有详细的答题思路、详细的代码注释、3个测试用例、为什么这道题采用XX算法、XX算法的适用场景发现新题目随时更新全天CSDN在线答疑。一、题目描述某社区有多条广播线路每条线路用一个大写英文字母编号表示 (A-Z)。当发送广播时为减少操作次数会将连续相邻编号且满足一定个数的线路合并为一个区间用“起始编号-结束编号”的简写形式表示不连续或不满足个数的线路则单独列出。合并后的结果要求按字母升序排列各项之间用一个逗号分隔。具体合并规则如下• 若连续的线路编号个数 ≥ 3 个则合并为一个区间格式为 起始-结束如 B-F 表示 B、C、D、E、F 五条线路• 若连续线路编号个数 2 个不合并仍各自单独列出如 AB 两个编号写成 A,B• 若连续线路编号个数 1 个单独列出如 G• 不连续的线路之间各自处理互不影响二、输入描述参数 1整数 n表示需要广播的线路条数参数 2n 个大写字母空格分隔表示发送广播的线路编号。字母可能重复但合并时每个编号只计一次。三、输出描述一个字符串 Q表示合并后的广播线路列表按字母升序排列项间用逗号分隔。约束1 ≤ n ≤ 26字母范围为 A-Z仅大写。输入字母可能有重复需去重后排序再合并。四、测试用例测试用例11、输入6G B A F D C2、输出A-D,F,G测试用例21、输入3A C B2、输出A-C五、解题思路六、Java算法源码publicclassOdTest{publicstaticvoidmain(String[]args){ScannerscannernewScanner(System.in);intnscanner.nextInt();/* * 由于线路编号只可能是 A-Z共 26 个 * 使用布尔数组即可同时完成 * * 1. 去重 * 2. 记录某个线路是否出现 * * exist[0] 表示 A 是否出现 * exist[1] 表示 B 是否出现 * ... * exist[25] 表示 Z 是否出现 */boolean[]existnewboolean[26];for(inti0;in;i){charchscanner.next().charAt(0);/* * 例如 * A - A 0 * B - A 1 * D - A 3 * * 如果存在重复字母只会重复把同一个位置设置成 true * 因此自然完成去重。 */exist[ch-A]true;}// 保存最终的每一个输出项例如 A-D、F、G。ListStringresultnewArrayList();inti0;while(i26){/* * 当前字母没有出现则直接跳过 * 继续寻找下一段连续线路的起点。 */if(!exist[i]){i;continue;}// 当前位置就是一段连续区间的起点。intstarti;/* * 不断检查后一个字母是否存在 * 找出当前连续线路区间的终点。 * * 例如 * A B C D 都存在 * * start A * end D */while(i126exist[i1]){i;}intendi;// 当前连续区间包含的字母个数。intlenend-start1;if(len3){/* * 连续线路不少于 3 个时进行压缩。 * * 例如 * A B C D * * 输出 * A-D */result.add((char)(Astart)-(char)(Aend));}else{/* * 连续线路只有 1 个或者 2 个时 * 根据题目要求不能使用区间形式 * 必须逐个输出。 * * 例如 * A B * * 输出 * A,B */for(intjstart;jend;j){result.add(String.valueOf((char)(Aj)));}}/* * 当前连续区间已经全部处理完成。 * i 当前位于区间终点 * 移动到下一个位置继续扫描。 */i;}// 使用逗号连接所有结果项不会产生多余逗号。System.out.println(String.join(,,result));scanner.close();}}七、效果展示1、输入7A B D E F H H2、输出A,B,D-F,H3、说明下一篇华为OD机试 - 简易内存池 - 逻辑分析Java 新系统 200分本专栏收录于《华为OD机试JAVA真题》。刷的越多抽中的概率越大私信哪吒备注华为OD加入华为OD刷题交流群每一题都有详细的答题思路、详细的代码注释、3个测试用例、为什么这道题采用XX算法、XX算法的适用场景发现新题目随时更新全天CSDN在线答疑。
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进