#青训营笔记创作活动 小U接到一个任务,需要根据给定的数字 n 构造一个特定的数组。这个数组的构造规则是:对于每个 i 从 1 到 n,将数字 n 到 i 逆序拼接,直到 i 等于 n 为止。最终,输出这个拼接后的数组。问题描述给定一个整数 n,构造一个数组。对于每个 i 从 1 到 n,逆序拼接数字 n 到 i。最终输出这个拼接后的数组。输入变量说明:
- n:给定的整数。
测试样例样例1:输入:n = 3输出:[3, 2, 1, 3, 2, 3]样例2:输入:n = 4输出:[4, 3, 2, 1, 4, 3, 2, 4, 3, 4]样例3:输入:n = 5输出:[5, 4, 3, 2, 1, 5, 4, 3, 2, 5, 4, 3, 5, 4, 5]问题分析我们需要构造一个数组,遵循以下规则:
-
对于每个 i 从 1 到 n,逆序拼接数字 n 到 i。
-
将每次拼接的结果累加到最终数组中。
关键思路1. 逆序拼接:对于每个 i,从 n 到 i 逆序拼接数字。2. 累加结果:将每次拼接的结果累加到最终数组中。代码实现
import java.util.ArrayList;
import java.util.List;
public class ConstructArray {
public static List constructArray(int n) {
List result = new ArrayList<>();
for (int i = 1; i <= n; i++) {
for (int j = n; j >= i; j--) {
result.add(j);
}
}
return result;
}
public static void main(String[] args) {
// 测试样例
System.out.println(constructArray(3)); // 输出: [3, 2, 1, 3, 2, 3]
System.out.println(constructArray(4)); // 输出: [4, 3, 2, 1, 4, 3, 2, 4, 3, 4]
System.out.println(constructArray(5)); // 输出: [5, 4, 3, 2, 1, 5, 4, 3, 2, 5, 4, 3, 5, 4, 5]
}
}
代码说明
1. 逆序拼接:使用两个嵌套循环,第一个循环从 1 到 n,第二个循环从 n 到 i,逆序拼接数字。2. 累加结果:将每次拼接的结果添加到 result 列表中。
-
逆序拼接:使用两个嵌套循环,第一个循环从 1 到 n,第二个循环从 n 到 i,逆序拼接数字。
-
累加结果:将每次拼接的结果添加到 result 列表中。
深入分析
-
时间复杂度:该算法的时间复杂度为 O(n^2),因为对于每个 i,我们都需要从 n 到 i 进行逆序拼接。
-
空间复杂度:空间复杂度为 O(n^2),因为我们需要存储最终的结果数组。
可能的优化
虽然这个问题的本质决定了其时间复杂度为 O(n^2),但在某些情况下,我们可以通过减少不必要的计算来优化性能。例如,如果我们只需要输出结果而不需要存储它,可以直接在控制台打印结果,减少内存使用。