构造特定数组的逆序拼接 | 豆包MarsCode AI刷题

74 阅读3分钟

小U需要构造一个数组,规则是:

  • 对于每个 iii 从 1 到 nnn:

    • 将数字从 nnn 到 iii 逆序拼接。

也就是说,最终的数组是将以下序列依次拼接得到的:

  1. 从 nnn 到 1 的序列
  2. 从 nnn 到 2 的序列
  3. 从 nnn 到 3 的序列
  4. 一直到从 nnn 到 nnn 的序列

举例说明:

  • 当 n=3n = 3n=3 时:

    • 第一次拼接:[3, 2, 1]
    • 第二次拼接:[3, 2]
    • 第三次拼接:[3]
    • 最终数组:[3, 2, 1, 3, 2, 3]
  • 当 n=4n = 4n=4 时:

    • 第一次拼接:[4, 3, 2, 1]
    • 第二次拼接:[4, 3, 2]
    • 第三次拼接:[4, 3]
    • 第四次拼接:[4]
    • 最终数组:[4, 3, 2, 1, 4, 3, 2, 4, 3, 4]

算法步骤:

  1. 初始化一个空的结果数组 result

  2. i = 1 遍历到 n

    • 对于每个 i,生成从 ni 的序列 sequence
    • sequence 添加到 result 数组末尾。

代码实现:

python
复制代码
def construct_array(n):
    result = []
    for i in range(1, n+1):
        sequence = list(range(n, i-1, -1))
        result.extend(sequence)
    return result

# 测试样例
# 样例1:
n = 3
print(construct_array(n))  # 输出:[3, 2, 1, 3, 2, 3]

# 样例2:
n = 4
print(construct_array(n))  # 输出:[4, 3, 2, 1, 4, 3, 2, 4, 3, 4]

# 样例3:
n = 5
print(construct_array(n))  # 输出:[5, 4, 3, 2, 1, 5, 4, 3, 2, 5, 4, 3, 5, 4, 5]

代码说明:

  • 使用 range(n, i-1, -1) 生成从 ni 的逆序序列。
  • extend 方法将 sequence 中的元素依次添加到 result 数组末尾。
  • 最终返回构造好的 result 数组。

复杂度分析:

  • 时间复杂度: O(n2)O(n^2)O(n2),因为外层循环执行 nnn 次,内层生成序列的长度平均为 n/2n/2n/2。
  • 空间复杂度: O(n2)O(n^2)O(n2),结果数组的长度与 nnn 的平方成正比。

小U需要构造一个数组,规则是:

  • 对于每个 iii 从 1 到 nnn:

    • 将数字从 nnn 到 iii 逆序拼接。

也就是说,最终的数组是将以下序列依次拼接得到的:

  1. 从 nnn 到 1 的序列
  2. 从 nnn 到 2 的序列
  3. 从 nnn 到 3 的序列
  4. 一直到从 nnn 到 nnn 的序列

举例说明:

  • 当 n=3n = 3n=3 时:

    • 第一次拼接:[3, 2, 1]
    • 第二次拼接:[3, 2]
    • 第三次拼接:[3]
    • 最终数组:[3, 2, 1, 3, 2, 3]
  • 当 n=4n = 4n=4 时:

    • 第一次拼接:[4, 3, 2, 1]
    • 第二次拼接:[4, 3, 2]
    • 第三次拼接:[4, 3]
    • 第四次拼接:[4]
    • 最终数组:[4, 3, 2, 1, 4, 3, 2, 4, 3, 4]

算法步骤:

  1. 初始化一个空的结果数组 result

  2. i = 1 遍历到 n

    • 对于每个 i,生成从 ni 的序列 sequence
    • sequence 添加到 result 数组末尾。

代码实现:

python
复制代码
def construct_array(n):
    result = []
    for i in range(1, n+1):
        sequence = list(range(n, i-1, -1))
        result.extend(sequence)
    return result

# 测试样例
# 样例1:
n = 3
print(construct_array(n))  # 输出:[3, 2, 1, 3, 2, 3]

# 样例2:
n = 4
print(construct_array(n))  # 输出:[4, 3, 2, 1, 4, 3, 2, 4, 3, 4]

# 样例3:
n = 5
print(construct_array(n))  # 输出:[5, 4, 3, 2, 1, 5, 4, 3, 2, 5, 4, 3, 5, 4, 5]

代码说明:

  • 使用 range(n, i-1, -1) 生成从 ni 的逆序序列。
  • extend 方法将 sequence 中的元素依次添加到 result 数组末尾。
  • 最终返回构造好的 result 数组。

复杂度分析:

  • 时间复杂度: O(n2)O(n^2)O(n2),因为外层循环执行 nnn 次,内层生成序列的长度平均为 n/2n/2n/2。
  • 空间复杂度: O(n2)O(n^2)O(n2),结果数组的长度与 nnn 的平方成正比。