一.长度最小的子数组
1.题目链接
209. 长度最小的子数组 - 力扣(LeetCode)
2.思路
采用滑动窗口算法,通过两个指针(这里用
i
和j
表示)动态调整窗口的大小
3.代码
class Solution {public int minSubArrayLen(int target, int[] nums) {int i=0;int j=0;int sum=0;int result=Integer.MAX_VALUE;for(;j<nums.length;j++){sum+=nums[j];while(sum>=target){result = Math.min(result, j-i+1);sum-=nums[i];i++;}}return result == Integer.MAX_VALUE ? 0 : result;}
}
二.螺旋矩阵
1.题目链接
59. 螺旋矩阵 II - 力扣(LeetCode)
2.思路
原则:左闭右开原则
循环圈数: n/2
3.代码
class Solution {public int[][] generateMatrix(int n) {int[][] nums = new int[n][n];/每一圈填充的起始坐标,初始化为 (0, 0)。int startX = 0, startY = 0; /offset 是偏移量,用于控制每一圈填充的边界范围,初始值设为 1int offset = 1;int count = 1; / 矩阵中需要填写的数字int loop = 1; / 记录当前的圈数int i, j; / j 代表列, i 代表行;while (loop <= n / 2) {/顶部/左闭右开,所以判断循环结束时, j 不能等于 n - offsetfor (j = startY; j < n - offset; j++) {nums[startX][j] = count++;}/右列/左闭右开,所以判断循环结束时, i 不能等于 n - offsetfor (i = startX; i < n - offset; i++) {nums[i][j] = count++;}/底部/左闭右开,所以判断循环结束时, j != startYfor (; j > startY; j--) {nums[i][j] = count++;}/左列/左闭右开,所以判断循环结束时, i != startXfor (; i > startX; i--) {nums[i][j] = count++;}startX++;startY++;offset++;loop++;}/ n 为奇数时,单独处理矩阵中心的值if (n % 2 == 1) { nums[i][j] = count;}return nums;}
}