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

977.有序数组的平方

977. 有序数组的平方 - 力扣(LeetCode)

思路:直接用双指针法解决,把平方后的元素再替换进数组中,之后利用数组sort排序再输出数组

C#代码:

public class Solution {
    public int[] SortedSquares(int[] nums) {
        int m = 0;
        for(int k = 0;k < nums.Length;k++){
            nums[m] = nums[k]*nums[k];
            m++;
        }
        Array.Sort(nums);
        return nums;
    }
}

209.长度最小的子数组

209. 长度最小的子数组 - 力扣(LeetCode)

思路:双指针的方法,快指针循环直到sum>=target,再对快慢指针包括的数组的长度比较,比较后减去慢指针i所属的元素,再i++。结束一遍循环后再判断sum是否大于等于target,是就继续减去慢指针,再i++,否则再for循环一遍,快指针往后移动,直到sum>=target或者到达数组的长度。所有循环完成后,判断一遍最小长度的值后就输出。

C#代码:

public class Solution {
    public int MinSubArrayLen(int target, int[] nums) {
        int i=0,miniLen = int.MaxValue;
        int sum = 0;
        for(int j=0;j= target){
                miniLen = Math.Min(j-i+1,miniLen);
                sum -= nums[i];
                i++;
            }
        }
        return miniLen == int.MaxValue?0:miniLen;
    }
}

59.螺旋矩阵II

59. 螺旋矩阵 II - 力扣(LeetCode)

思路:只要能明白螺旋过程出现拐角前一直保持行(列)不变,拐弯后就保持列(行)不变就能解决。还有注意用的方法是二分法中的左闭右开的方法。(左闭右闭还没研究怎么实现,但左闭右开的方法应该比较容易理解和写出的)

代码随想录算法训练营第二天|977.有序数组的平方、209.长度最小的子数组、59.螺旋矩阵II_第1张图片

C#代码:

public class Solution {
    public int[][] GenerateMatrix(int n) {
        int[][] a = new int[n][];
        for(int i=0;iy;i--){a[x][i] = count++;}
            for(int i=x;i>y;i--){a[i][y] = count++;}
            y++;
            x--;
        }
        if(n%2==1){a[n/2][n/2] = count;}
        return a;
        
    }
}

54. 螺旋矩阵 - 力扣(LeetCode)

思路:

代码随想录算法训练营第二天|977.有序数组的平方、209.长度最小的子数组、59.螺旋矩阵II_第2张图片

public class Solution {
    public IList SpiralOrder(int[][] matrix) {
            IList order = new List();
            int X = matrix.Length;
            int Y = matrix[0].Length;
            int sum = X * Y;
            int count = 1;
            //上边界、下边界、左边界、右边界
            int top = 0,bottom = X - 1, left = 0,right = Y - 1;
            while (0 < sum)
            {
                for(int col = left; col <= right && sum > 0;col++){
                    order.Add(matrix[top][col]);
                    sum--;
                }
                top++;
                for(int row = top; row <= bottom && sum > 0; row++){
                    order.Add(matrix[row][right]);
                    sum--;
                }
                right--;
                for(int col = right;col >= left && sum > 0;col--){
                    order.Add(matrix[bottom][col]);
                    sum--;
                }
                bottom--;
                for(int row = bottom;row >= top && sum > 0;row--){
                    order.Add(matrix[row][left]);
                    sum--;
                }
                left++;
            }
            return order;
    }
}

总结:前两道题看一下视频知道是用双指针后很容易就解决,不过这第三道螺旋矩阵看视频一时间没想起来,后面多画几张图之后才明白是怎样的一个思路。

你可能感兴趣的:(代码随想录,算法)