当前位置: 首页 > ds >正文

最小循环子数组 - 华为OD统一考试(Python题解)

华为OD机试题库《C++》限时优惠 9.9

华为OD机试题库《Python》限时优惠 9.9

华为OD机试题库《JavaScript》限时优惠 9.9

针对刷题难,效率慢,我们提供一对一算法辅导, 针对个人情况定制化的提高计划(全称1V1效率更高)。

看不懂有疑问需要答疑辅导欢迎私VX: code5bug

华为OD机试真题

题目描述

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

输入描述

第一行输入数组中元素个数n,1 <= n <= 100000

第二行输入数组的数字序列nums,以空格分割,0 <= nums[i] <= 10

输出描述

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

备注

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

示例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次拼接而成

题解

这道题目属于数组模式匹配类问题,具体来说是寻找数组的最小循环节(最小重复子数组)。这类问题通常可以通过字符串匹配算法或数学方法解决。

解题思路

核心思路

  1. 问题转化:将原问题转化为寻找数组的最小周期(最小重复子数组长度)。如果数组可以由某个子数组重复多次构成,那么这个子数组的长度必须是数组长度的约数。
  2. 关键观察
    • 最小重复子数组的长度必须是数组长度的约数
    • 每个元素出现的次数必须是重复次数的整数倍
    • 需要验证候选子数组是否能通过重复构成原数组
  3. 优化策略
    • 先统计每个数字的出现频率
    • 最小重复次数是所有数字出现次数的最大公约数
    • 从小到大枚举可能的子数组长度进行验证

算法选择

使用枚举+验证的方法:

  1. 枚举所有可能的子数组长度(数组长度的约数)
  2. 对于每个候选长度,验证是否能通过重复构成原数组

Python

from collections import Counterdef check_repeated(nums, sub_length):"""检查数组nums是否由长度为sub_length的子数组重复构成"""n = len(nums)return all(nums[i] == nums[j] for i in range(sub_length) for j in range(i + sub_length, n, sub_length))def main():n = int(input())nums = list(map(int, input().split()))cnt = Counter(nums)result = n  # 默认结果是整个数组# 枚举所有可能的子数组长度for sub_length in range(1, n // min(cnt.values()) + 1):if n % sub_length != 0:continueif any(v % sub_length for v in cnt.values()):continueif check_repeated(nums, sub_length):result = sub_lengthbreak# 输出结果子数组print(' '.join(map(str, nums[:result])))if __name__ == "__main__":main()

整理题解不易, 如果有帮助到您,请给点个赞 ‍❤️‍ 和收藏 ⭐,让更多的人看到。🙏🙏🙏

http://www.xdnf.cn/news/5421.html

相关文章:

  • 重力场模型、球谐函数以及重力异常
  • python3环境安装
  • 【ESP32+vscode】问题记录
  • visual studio 2015 安装闪退问题
  • [CLS] 向量是 BERT 类模型中一个特别重要的输出向量,它代表整个句子或文本的全局语义信息
  • Github 2025-05-10 Rust开源项目日报 Top10
  • TransmittableThreadLocal:穿透线程边界的上下文传递艺术
  • 数据库事务
  • GD32H7复位后程序调用函数时间增加
  • Linux 下 Java 部署环境搭建与项目部署详细步骤
  • 质数和约数
  • LabVIEW电涡流传感器自动校准系统
  • 【编译原理】总结
  • 由反激电源引起的一点儿分析
  • project从入门到精通(五)
  • Java ClassLoader双亲委派机制
  • 亿级流量系统架构设计与实战(六)
  • Python pip安装conan(在线)
  • Block Styler——字符串控件
  • Cell | 大规模 单细胞图谱 揭示非小细胞肺癌抗PD-1治疗后的免疫微环境异质性
  • 47.电压跌落与瞬时中断干扰的防护改善措施
  • JDBC执行sql过程
  • 技术视角解析:哈达斯无醇气泡葡萄汁的双重风味密码​
  • GLPK(GNU线性规划工具包)介绍
  • Java 中的数据类型误导点!!!
  • windows 环境下 python环境安装与配置
  • Redis-x64-3.0.500
  • React文档-State数据扁平化
  • Vue3响应式原理源码解析(通俗易懂版)
  • Qt中在子线程中刷新UI的方法