代码随想录算法训练营第二天 |977.有序数组的平方 、 209.长度最小的子数组

977.有序数组的平方

题目链接:[977.有序数组的平方][https://leetcode.cn/problems/squares-of-a-sorted-array/]

  • 一开始想的是从中间开始两个指针分别向左右出发,这样可以依照从小到大的顺序。

  • 后来发现把从小到大倒过来找从大到小更简单

209.长度最小的子数组

题目链接:(209.长度最小的子数组)[https://leetcode.cn/problems/minimum-size-subarray-sum/]

  • 暴力法重复过多,时间复杂度O(N2)

  • 在子集合中所有元素和大于等于target的时候进行while循环(不是if!!!),循环中动态调整起始位置

59.螺旋矩阵II

题目链接:59.螺旋矩阵II

  • 分享一个比较直观的代码,不用考虑corner case
class Solution {
    public int[][] generateMatrix(int n) {
        int left = 0, right = n - 1;
        int top = 0; 
        int bottom = n - 1;
        int counter = 1;
        int [][] maxtrix = new int[n][n];
        while(counter !=  n * n + 1 ){
            for(int i = left; i <= right; i++){
                maxtrix[top][i] = counter++;
            }
            top++;
            for(int i = top; i <= bottom; i++){
                maxtrix[i][right] = counter++;
            }
            right--;
            for(int i = right; i >= left; i--){
                maxtrix[bottom][i] = counter++;
            }
            bottom--;
            for(int i = bottom; i >= top; i--){
                maxtrix[i][left] = counter++;
            }
            left++;
        }
        return maxtrix;
    }
}

你可能感兴趣的:(代码随想录算法训练营第二天 |977.有序数组的平方 、 209.长度最小的子数组)