小U需要构造一个数组,规则是:
-
对于每个 iii 从 1 到 nnn:
- 将数字从 nnn 到 iii 逆序拼接。
也就是说,最终的数组是将以下序列依次拼接得到的:
- 从 nnn 到 1 的序列
- 从 nnn 到 2 的序列
- 从 nnn 到 3 的序列
- 一直到从 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]
算法步骤:
-
初始化一个空的结果数组
result。 -
从
i = 1遍历到n:- 对于每个
i,生成从n到i的序列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)生成从n到i的逆序序列。 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 逆序拼接。
也就是说,最终的数组是将以下序列依次拼接得到的:
- 从 nnn 到 1 的序列
- 从 nnn 到 2 的序列
- 从 nnn 到 3 的序列
- 一直到从 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]
算法步骤:
-
初始化一个空的结果数组
result。 -
从
i = 1遍历到n:- 对于每个
i,生成从n到i的序列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)生成从n到i的逆序序列。 extend方法将sequence中的元素依次添加到result数组末尾。- 最终返回构造好的
result数组。
复杂度分析:
- 时间复杂度: O(n2)O(n^2)O(n2),因为外层循环执行 nnn 次,内层生成序列的长度平均为 n/2n/2n/2。
- 空间复杂度: O(n2)O(n^2)O(n2),结果数组的长度与 nnn 的平方成正比。