计算数列位置N的值

2026 华为OD机试真题 4月15日华为OD上机新系统考试真题 100 分题型

点击查看华为 OD 机试真题完整目录:2026最新华为OD机试新系统卷 + 双机位C卷 真题题库目录|全覆盖题库 + 逐点算法考点详解

题目描述

  1. 输入MN两个数,则按照以下规则形成一个数列。
  2. 数列的前M个元素的值为1M
  3. 从M+1个元素开始,计算逻辑为
    1. 如果其前M个元素中,存在值相同的元素,则该位置上的数值等于前M个数中最大数值与最小数值之和。
    2. 如果其前M个元素中,不存在值相同的元素,则该位置上的数值等于前M个数中最大的数值和最小数值之差。

请计算该数列第N个位置上的数值

补充

  • 3 <= M <= 10
  • 1 <= N <= 50

输入描述

输出N和M,使用, 分割

输出描述

输出N位置上的数值

示例1

输入

5,1

输出

1

说明

示例2

输入

5,5

输出

5

说明

示例3

输入

5,6

输出

4

说明

解题思路

核心思想

本题是一道模拟题,要求根据给定的 $M$ 和 $N$ 按照特定规则生成数列并求出第 $N$ 个元素的值。

数列生成规则:

  1. 前 $M$ 个元素:直接赋值为 $1$ 到 $M$。
  2. 从第 $M+1$ 个元素开始:观察其前 $M$ 个元素。
    • 如果前 $M$ 个元素中存在重复的值:当前值 = 前 $M$ 个元素中的 最大值 + 最小值
    • 如果前 $M$ 个元素中不存在重复的值:当前值 = 前 $M$ 个元素中的 最大值 - 最小值

解题步骤:

  1. 使用一个列表(数组)存储生成的数列。
  2. 循环 $N-M$ 次,每次根据前 $M$ 个元素的状态计算新元素。
  3. 判断重复可以使用集合(Set)或哈希表,如果集合大小小于 $M$,说明有重复。
  4. 直接返回数列的第 $N$ 个元素。

复杂度分析

  • 时间复杂度:$O(N \times M)$。我们需要计算到第 $N$ 个元素,每次计算需要遍历前 $M$ 个元素来找最大值、最小值并判断重复。给定 $N \le 50, M \le 10$,复杂度非常低。
  • 空间复杂度:$O(N)$。需要一个长度为 $N$ 的数组来存储数列。
THE END