华为OD机试真题 新系统 - 计算数列位置N的值 (JavaPyCC++JsGo)

2 阅读2分钟

计算数列位置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

说明

解题思路

核心思想

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

数列生成规则:

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

解题步骤:

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

复杂度分析

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