第二天 | 有序数组的平方 | 长度最小的子数组 | 螺旋矩阵

2,587 阅读1分钟

长度最小的子数组

随想录的文章链接

programmercarl.com/0977.%E6%9C…

看完代码随想录之后的想法

从后往前生成比较巧妙。

自己实现过程中遇到哪些困难

没碰到困难。

今日收获,记录一下自己的学习时长

文章15分钟,写代码15分钟。

public static int[] sortSquares(int[] nums) {
    if (nums == null || nums.length == 0) {
        return new int[0];
    }

    int[] result = new int[nums.length];
    int index = nums.length - 1;
    int i = 0, j = nums.length - 1;
    while (i <= j) {
        int left = nums[i] * nums[i];
        int right = nums[j] * nums[j];
        if (left < right) {
            result[index--] = right;
            j--;
        } else {
            result[index--] = left;
            i++;
        }
    }

    return result;
}

长度最小的子数组

随想录的文章链接

programmercarl.com/0209.%E9%95…

看完代码随想录之后的想法

双指针的操作有点烧脑。

自己实现过程中遇到哪些困难

没碰到困难。

今日收获,记录一下自己的学习时长

文章15分钟,写代码20分钟。

public static int minSubArrayLen(int target, int[] nums) {
    if (nums == null || nums.length == 0) {
        return 0;
    }

    int i = 0, j = 0;
    int sum = 0;
    int length = nums.length + 1;
    while (j < nums.length) {
        if (sum + nums[j] >= target) {
            length = Math.min(length, j - i + 1);
            sum = sum - nums[i];
            i++;
        } else {
            sum = sum + nums[j];
            j++;
        }
    }

    return length == nums.length + 1 ? 0 : length;
}

螺旋矩阵

随想录的文章链接

programmercarl.com/0059.%E8%9E…

看完代码随想录之后的想法

之前面试做过螺旋矩阵的打印,这次是生成螺旋矩阵,逻辑是一样的。随想录提供的代码比较简洁,再一次写还是出现多处错误。

自己实现过程中遇到哪些困难

循环的起始位置、奇数的最后一个位置判断,第一次没写对。

今日收获,记录一下自己的学习时长

文章20分钟,写代码30分钟。

public static int[][] generateMatrix(int n) {
    int[][] result = new int[n][n];

    int num = 1;
    int i = 0, j = 0;
    int loop = 0;
    while (loop < n/2) {
        for (i = loop; i < n - 1 - loop; i++) { // 从左到右
            result[loop][i] = num++;
        }

        for (j = loop; j < n - 1 - loop; j++) { // 从上到下
            result[j][i] = num++;
        }

        for (; i > loop; i--) { // 从右到左
            result[j][i] = num++;
        }

        for (; j > loop; j--) { // 从下到上
            result[j][i] = num++;
        }

        loop++;
    }

    if (n % 2 == 1) {
        result[loop][loop] = num;
    }

    return result;
}