伴学笔记5

66 阅读2分钟

#青训营笔记创作活动 小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),但在某些情况下,我们可以通过减少不必要的计算来优化性能。例如,如果我们只需要输出结果而不需要存储它,可以直接在控制台打印结果,减少内存使用。