华为OD机试真题——最小循环子数组 (2025B卷:100分)Java/python/JavaScript/C/C++/GO最佳实现

在这里插入图片描述

2025 B卷 100分 题型

本专栏内全部题目均提供Java、python、JavaScript、C、C++、GO六种语言的最佳实现方式;
并且每种语言均涵盖详细的问题分析、解题思路、代码实现、代码详解、3个测试用例以及综合分析;
本文收录于专栏:《2025华为OD真题目录+全流程解析+备考攻略+经验分享》

华为OD机试真题《最小循环子数组》:


文章快捷目录

题目描述及说明

Java

python

JavaScript

C++

C

GO


题目名称:最小循环子数组


知识点:字符串匹配、KMP算法(或枚举验证)
时间限制:1秒
空间限制:256MB
限定语言:不限


题目描述

给定一个由若干整数组成的数组 nums,请检查数组是否是由某个子数组重复循环拼接而成,并输出这个最小的子数组。

输入描述

  • 第一行输入数组中元素个数 n1 ≤ n ≤ 100000
  • 第二行输入数组的数字序列 nums,以空格分割,0 ≤ nums[i] ≤ 10

输出描述
输出最小的子数组的数字序列,以空格分割。

备注
数组本身是其最大的子数组,循环1次可生成自身。

示例
输入:

9  
1 2 1 1 2 1 1 2 1  

输出:

1 2 1  

说明:数组 [1,2,1,1,2,1,1,2,1] 可由子数组 [1,2,1] 重复循环3次拼接而成。


Java

问题分析

我们需要找到一个数组的最小循环子数组,即该数组可以由该子数组重复拼接而成。解决此问题的关键在于确定数组是否由某个子数组重复构成,并找出最小的这样的子数组。


解题思路

  1. 候选子数组长度的确定:循环子数组的长度必须是原数组长度的因数。
  2. 因数枚举:找出原数组长度的所有因数,并按从小到大顺序检查。
  3. 循环验证:对于每个候选长度,验证数组是否可以由该长度的子数组重复构成。
  4. 输出结果:找到第一个满足条件的最小子数组。

代码实现

import java.util.Scanner;
import java.util.TreeSet;public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int n = scanner.nextInt(); // 读取数组长度int[] nums = new int[n];for (int i = 0; i < n; i++) {nums[i] = scanner.nextInt(); // 读取数组元素}// 生成所有可能的因数(包括n)TreeSet<Integer> factors = new TreeSet<>();for (int i = 1; i * i <= n; i++) {if (n % i == 0) {factors.add(i);factors.add(n / i);}}// 遍历所有因数,从小到大检查for (int d : factors) {if (check(nums, d)) { // 验证当前因数对应的子数组是否符合循环条件printResult(nums, d); // 打印结果return;}}printResult(nums, n); // 最终必能匹配自身(d=n)}private static boolean check(int[] nums, int d) {for (int i = 0; i < nums.length; i++) {if (nums[i] != nums[i % d]) { // 核心验证逻辑:每个位置必须与子数组对应位置相同return false;}}return true;}private static void printResult(int[] nums, int d) {StringBuilder sb = new StringBuilder();for (int i = 0; i < d; i++) {sb.append(nums[i]);if (i != d - 1) {sb.append(" ");}}System.out.println(sb);}
}

代码解析

  1. 输入处理

    int n = scanner.nextInt();
    int[] nums = new int[n];
    for (int i = 0; i < n; i++) {nums[i] = scanner.nextInt();
    }
    
    • 读取数组长度和元素。
  2. 因数生成

    TreeSet<Integer> factors = new TreeSet<>();
    for (int i = 1; i * i <= n; i++) {if (n % i == 0) {factors.add(i);factors.add(n / i);}
    }
    
    • 遍历1sqrt(n),收集所有因数并存入有序集合,自动去重并排序。
  3. 循环验证

    for (int d : factors) {if (check(nums, d)) {printResult(nums, d);return;}
    }
    
    • 从小到大遍历因数,验证每个因数对应的子数组是否符合循环条件。
  4. 验证逻辑

    private static boolean check(int[] nums, int d) {for (int i = 0; i < nums.length; i++) {if (nums[i] != nums[i % d]) {return false;}}return true;
    }
    
    • 核心逻辑:数组的每个元素必须等于其对应子数组位置的元素。
  5. 结果输出

    private static void printResult(int[] nums, int d) {StringBuilder sb = new StringBuilder();for (int i = 0; i < d; i++) {sb.append(nums[i]);if (i 

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

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

相关文章

OpenCv高阶(十七)——dlib库安装、dlib人脸检测

文章目录 前言一、dlib库简介二、dlib库安装1、本地安装&#xff08;离线&#xff09;2、线上安装 三、dlib人脸检测原理1、HOG 特征提取2、 SVM 分类器训练3、 滑动窗口搜索4、非极大值抑制&#xff08;NMS&#xff09; 四、dlib人脸检测代码1、导入OpenCV计算机视觉库和dlib机…

AD-PCB--AD20软件安装及中英文切换 DAY 2

1.软件安装 1.1 软件包下载 给你一个捷径&#xff1a; 1.2 安装过程&#xff08;安装过的人跳过就好&#xff0c;一般很多都支持懒人安装&#xff09; 双击其中的exe文件 点击下一步 选择中文 接受用户协议 下面这个弹窗有的没有。 建议勾选导入导出 安装目录&#xff0c…

单向循环链表与双向链表

单向循环链表的原理与应用 思考&#xff1a;对于单向链表而言&#xff0c;想要遍历链表&#xff0c;则必须从链表的首结点开始进行遍历&#xff0c;请问有没有更简单的方案实现链表中的数据的增删改查&#xff1f; 回答&#xff1a;是有的&#xff0c;可以使用单向循环的链表进…

Windows鼠标掉帧测试与修复

前言 这两天突然发现鼠标似乎有掉帧&#xff0c;但是掉的又不太明显&#xff0c;用着感觉似乎快速移动的时候会有一瞬间卡一下&#xff0c;但是眼睛又看不清楚&#xff0c;不太确定是不是自己的心理作用&#xff0c;非常难受。 如何判断鼠标是否掉帧 根据我的经验&#xff0…

U 盘数据恢复全攻略

目录 &#x1f4be; U盘数据误删怎么办&#xff1f;两款实用工具助你找回丢失文件&#xff01;1️⃣ Recover My Files&#xff1a;数据恢复的得力助手&#x1f4cc; 主要特点&#x1f6e0; 使用步骤详解1. 下载与安装2. 启动软件并选择恢复类型3. 选择U盘所在分区4. 选择文件恢…

HarmonyOS NEXT~鸿蒙系统运维:全面解析与最佳实践

HarmonyOS NEXT&#xff5e;鸿蒙系统运维&#xff1a;全面解析与最佳实践 摘要 本文深入探讨鸿蒙(HarmonyOS)系统的运维管理&#xff0c;从架构特点到日常维护操作&#xff0c;全面分析这一全场景分布式操作系统的运维要点。文章将介绍鸿蒙系统特有的分布式能力运维管理、性能…

基于 STM32 的智慧农业温室控制系统设计与实现

摘要 本文提出一种基于 STM32 微控制器的智慧农业温室控制系统设计方案,通过集成多类型环境传感器、执行机构及无线通信模块,实现对温室内温湿度、光照、土壤湿度等参数的实时监测与自动调控。文中详细阐述硬件选型、电路连接及软件实现流程,并附关键代码示例,为智慧农业领…

Appium+python自动化(五)- 模拟器

简介 Appium是做安卓自动化的一个比较流行的工具&#xff0c;对于想要学习该工具但是又局限于没 android 手机来说&#xff0c;可以通过安卓模拟器来解决该问题&#xff0c;下面就讲解使用appium连接安卓模拟器的操作步骤。而是由于手机数据线问题&#xff0c;也只好先用模拟器…

汽车充电桩专用ASCP210系列电气防火限流式保护器

1.概述汽车充电桩专用电气防火限流式保护器 电气防火限流式保护器可有效克服传统断路器、空气开关和监控设备存在的短路电流大、切断短路电流时间长、短路时产生的电弧火花大&#xff0c;以及使用寿命短等弊端&#xff0c;发生短路故障时&#xff0c;能以微秒级速度快速限制短…

Linux中磁盘分区与挂载

一、磁盘划分 1.1 了解磁盘 硬盘的接口类型 接口类型发展方向应用场景IDESATA I/II/III个人PC机SCSISAS服务器上 磁盘命名规则 OSIDE(并口)SATA(串口)SCSIRHEL5/dev/hda/dev/sda/dev/sdaRHEL6/dev/sda/dev/sda/dev/sdaRHEL7/dev/sda/dev/sda/dev/sda 1.2 磁盘划分 磁盘划…

【数据分析】什么是特征蒸馏?

引言 —— “ 在数据洪流中提炼真金——解密特征蒸馏的艺术。” 在数据爆炸的时代&#xff0c;我们每天产生的信息量已远超人类处理能力的极限。当企业拥有百万维的用户行为数据&#xff0c;医疗研究者面对TB级的基因测序记录&#xff0c;工程师试图从千万张图像中识别关键模式…

机器学习笔记【Week4】

一、 为什么要用神经网络&#xff1f; 逻辑回归只能处理线性可分问题。例如&#xff0c;经典的 XOR 异或问题无法用单层逻辑回归准确分类。神经网络通过多层结构和非线性激活函数&#xff0c;能学习复杂的决策边界&#xff0c;解决非线性问题。 二、神经网络的基本组成 神经网…

java交易所,多语言,外汇,黄金,区块链,dapp类型的,支持授权,划转,挖矿(源码下载)

目前这套主要是运营交易所类型的&#xff0c;授权的会贵点&#xff0c;编译后的是可以直接跑的&#xff0c;图片也修复了&#xff0c;后门也扫了 都是在跑的项目支持测&#xff0c;全开源 源码下载&#xff1a;https://download.csdn.net/download/m0_66047725/90887047 更多…

2025CCPC河北省赛题解

题目区分度不错&#xff0c;不过两题手快铜确实没想到。 Attention is all you need&#xff01; H - What is all you need? 签到题 #include <bits/stdc.h> #define x first #define y second #define int long long #define double long doubleusing namespace st…

【IOS】【OC】【应用内打印功能的实现】如何在APP内实现打印功能,连接本地打印机,把想要打印的界面打印成图片

【IOS】【OC】【应用内打印功能的实现】如何在APP内实现打印功能&#xff0c;连接本地打印机&#xff0c;打印想打印的界面 设备/引擎&#xff1a;Mac&#xff08;14.1.1&#xff09;/cocos 开发工具&#xff1a;Xcode 开发语言&#xff1a;OC/C 开发需求&#xff1a;工程中…

AWS WebRTC:获取信令服务节点和ICE服务节点

建立WebRTC的第一步是获取信令服务节点和ICE服务节点。 前提条件是有访问AWS的密钥&#xff0c;主要是ak&#xff0c;sk&#xff0c;token&#xff0c;我这边是业务云有接口可以返回这些信息&#xff0c;所以我直接从业务云获取。 先介绍一下什么是ak&#xff0c;sk&#xff…

C++23 新成员函数与字符串类型的改动

文章目录 引言std::basic_string::contains 与 std::basic_string_view::contains (P1679R3)功能介绍示例代码优势 禁止从 nullptr 构造 std::basic_string 和 std::basic_string_view (P2166R1)背景改动影响 std::basic_string_view 的显式范围构造函数 (P1989R2)功能介绍示例…

VMware-MySQL主从

MySQL主从 服务器信息 服务器类型角色主机地址主机名称虚拟机master192.168.40.128test-1虚拟机slave192.168.40.129test-2 Master 配置&#xff08;192.168.40.128&#xff09; 删除自动生成的配置 /var/lib/mysql/auto.cnf [roottest-1 ~]# rm -rf /var/lib/mysql/auto.…

Java组合、聚合与关联:核心区别解析

在Java中&#xff0c;组合、聚合和关联是描述类之间关系的三种不同方式&#xff0c;它们的核心区别在于对象间的依赖强度和生命周期管理。以下是它们的详细对比&#xff1a; 1. 关联&#xff08;Association&#xff09; 定义&#xff1a;最基本的类间关系&#xff0c;表示一个…

如何保护网络免受零日漏洞攻击?

零日漏洞&#xff08;Zero-Day Vulnerability&#xff09;是指软件或系统中尚未被厂商发现或修补的安全漏洞。这个名称中的“零日”意味着&#xff0c;从漏洞被发现到厂商发布修复补丁的时间是零天&#xff0c;也就是说&#xff0c;黑客可以利用这个漏洞进行攻击&#xff0c;而…