华为OD E卷(100分)38-数组拼接

ops/2024/12/28 22:51:34/

前言

        工作了十几年,从普通的研发工程师一路成长为研发经理、研发总监。临近40岁,本想辞职后换一个相对稳定的工作环境一直干到老, 没想到离职后三个多月了还没找到工作,愁肠百结。为了让自己有点事情做,也算提高一下自己的编程能力,无聊之余打算用一些大厂的编程题练练手。希望通过这些分享能够帮到一些人,也希望能和看到此文的大神们沟通交流,提升自己,更希望在此期间能够找到一份理想的工作。

题目描述

        现在有多组整数数组,需要将它们合并成一个新的数组。合并规则如下:

  1. 从每个数组里按顺序取出固定长度的内容合并到新的数组中,取完的内容会删除掉。
  2. 如果该行不足固定长度或者已经为空,则直接取出剩余部分的内容放到新的数组中,继续下一行。

输入

  1. 第一行是每次读取的固定长度L,满足 0<L<10。
  2. 第二行是整数数组的数目N,满足 0<N<1000。
  3. 第 3 到第 N+2 行是需要合并的数组,不同的数组用回车换行分隔,数组内部用逗号分隔,每个数组最多不超过 100 个元素。

输出

        输出一个新的数组,用逗号分隔。

示例 

示例1

输入
3
2
2,5,6,7,9,5,7
1,7,4,3,4
输出

2,5,6,1,7,4,7,9,5,3,4,7

说明

1、获得长度3和数组数目2
2、先遍历第一行,获得2,5,6
3、再遍历第二行,获得1,7,4
4、再循环回到第一行,获得7,9,5
5、再遍历第二行,获得3,4
6、再回到第一行,获得7,按顺序拼接成最终结果

示例2

输入
4
3
1,2,3,4,5,6
1,2,3
1,2,3,4
输出

1,2,3,4,1,2,3,1,2,3,4,5,6

说明

种第7棵树,最多连续胡杨树棵数位6(5,6,7,8,9,10)

示例3

输入
3
2
2,5,6,7,,,9,5,7
1,7,4,3,,4
输出

2,5,6,1,7,4,7,9,5,3,4,7

说明

输入用例中的数组存在空元素,需要过滤掉空串

数据范围

0<L<10
0<N<1000
每个数组最多不超过 100 个元素 

解题思路

        使用List存储,每个对象为String数组,且为去除为空的。

        循环遍历每个数组并取L长度的值,直到结尾为止。读完的从List中去除,直到List为空为止。

题解

Java实现

package huawei.e100;import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
import java.util.Scanner;/**
* @author YangShun
* @date 2024年12月24日
* 数组拼接
*/
public class T38 {public static void main(String[] args) {Scanner sc = new Scanner(System.in);while(sc.hasNext()) {int l = sc.nextInt();int n = sc.nextInt();sc.nextLine();List<String[]> data = new ArrayList<>();for (int i = 0; i < n; i++) {String[] tmp = sc.nextLine().split(",");// 数组去除空数据 并添加到列表中data.add(Arrays.stream(tmp).filter(str-> str.trim().length()>0).toArray(String[]::new));}List<String> res = run(data, l);System.out.println(String.join(",", res));}}static List<String> run(List<String[]> data, int l) {List<String> res = new ArrayList<>();int time = 0;// 循环取值,直到列表为空为止while(data.size()> 0) {Iterator<String[]> it = data.iterator();while(it.hasNext()) {String[] d = it.next();if(l*time >= d.length) {it.remove(); // 取完的数组从列表中删除} else {// 每次从数组中取l个数,遇到结束退出for (int i = l*time; i < d.length && i < l*time + l; i++) {res.add(d[i]);}}}time ++;}return res;}}


http://www.ppmy.cn/ops/145757.html

相关文章

【国产NI替代】基于全国产FPGA的16振动+2转速+8路IO口输入输出(24bits)256k采样率,高精度终端采集板卡

16振动2转速8路IO口输入输出&#xff08;24bits&#xff09; 高精度终端采集板卡 采用AG16KF256国产FPGA的硬件架构&#xff0c;外扩 16MB的SDRAM做为千兆网的发送缓存&#xff0c;比起同 款带ARM的硬件架构&#xff0c;纯FPGA的架构虽然边缘 计算能力不如ARM&#xff0c;但…

OpenCV 入门

OpenCV_Python 入门 创建/显示窗口 方法说明参数返回namedWindow创建一个窗口窗口名称,WINDOW_NORMAL(窗口属性)resizeWindow设置窗口大小窗口名称,宽,高imshow显示窗口窗口名称,要显示的图像destroyAllWindows关闭所有窗口waitKey延时监听键盘按下0无限 / 单位毫秒键盘按下键…

【虚拟机网络拓扑记录】

虚拟机网络拓扑记录 虚拟机安装windows到ubuntu的网络拓扑ubuntu到ubuntu里面的虚拟机网络拓扑windows到ubuntu里面的虚拟机网络拓扑 虚拟机安装 本实验宿主机为windos&#xff0c; 安装vmware&#xff0c;虚拟机操作系统使用ubuntu&#xff0c;然后再在ubuntu上面创建新的虚拟…

Java重要面试名词整理(七):分库分表

文章目录 搭建MySQL主从集群GTID同步集群MySQL高可用方案1、MMM2、MHA3、MGR ShardingSphere理解ShardingSphere的核心概念垂直分片与水平分片ShardingSphere实现分库分表的核心概念 常见的分片策略简单INLINE分片算法STANDARD标准分片算法COMPLEX_INLINE复杂分片算法CLASS_BAS…

WebSocket | 背景 概念 原理 使用 优缺点及适用场景

1 背景 在 WebSocket 出现之前&#xff0c;为了实现推送技术&#xff0c;所用的技术都是轮询&#xff0c;轮询是指浏览器每隔一段时间向服务器发出 HTTP 请求&#xff0c;服务器再返回最新的数据给客户端 常见的轮询方式分为轮询与长轮询&#xff0c;它们的区别如下图所示&…

Judging LLM-as-a-Judge with MT-Bench and Chatbot Arena

指令微调后的模型不一定在传统Benchmark上取得更好的结果&#xff0c;类似MMLU和HELM。根据人类爱好对齐后的模型&#xff0c;需要新的评测方法。 文章提出了两个主要内容&#xff1a;MT-bench和Chatbot Arena MT-bench是一系列开放式问题&#xff0c;用于评估聊天机器人的多回…

什么是Spring Boot 应用开发?

一、引言 在当今的软件开发领域&#xff0c;Java 依然占据着重要的地位&#xff0c;而 Spring Boot 作为 Java 生态系统中极具影响力的框架&#xff0c;极大地简化了企业级应用的开发流程&#xff0c;提升了开发效率和应用的可维护性。它基于 Spring 框架构建&#xff0c;通过约…

Spring事务回滚

Transactional注解 Transactional作用&#xff1a;就是在当前这个方法执行开始之前来开启事务&#xff0c;方法执行完毕之后提交事务。如果在这个方法执行的过程当中出现了异常&#xff0c;就会进行事务的回滚操作。 Transactional注解&#xff1a;我们一般会在业务层当中来控制…