代码随想录刷题记录第二天 | 数组 | 209.长度最小的子数组 |59. 螺旋矩阵 II
题目链接:209.长度最小的子数组 - https://leetcode.cn/problems/minimum-size-subarray-sum/description/
59. 螺旋矩阵 II - https://leetcode.cn/problems/spiral-matrix-ii/description/
文章学习链接:https://programmercarl.com/0059.螺旋矩阵II.html#算法公开课
209. 长度最小的子数组
题目内容:给定一个含有 n 个正整数的数组和一个正整数 target 。
找出该数组中满足其总和大于等于 target 的长度最小的 连续子数组 [numsl, numsl+1, ..., numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0 。
关键字:连续子数组
解题思路
1、暴力破解
2、滑动窗口
暴力破解
给定一个很大的值subLen,两层遍历,外层遍历数组的每个值,内层确定达到和达到和target的值所需要的长度,拿它和subLen比较,小于则重新赋值
解题代码
class Solution {
public int minSubArrayLen(int target, int[] nums) {
// 暴力破解 , 超出时间限制 , 试了试官方的暴力破解也超出时间限制
int subLen = Integer.MAX_VALUE;
for(int i = 0,len = nums.length; i<len;i++){
int sum = 0;
for(int j = i; j<len;j++){
sum += nums[j];
if(sum >= target){
subLen = (j - i + 1 <= subLen ? j-i+1 : subLen);
break;
}
}
}
return subLen == Integer.MAX_VALUE ? 0 : subLen;
}
}
滑动窗口
关键点:是先遍历找到一个满足条件数组和大于s的值才开始移动左边的边界
解题代码
class Solution {
public int minSubArrayLen(int target, int[] nums) {
int subLen = Integer.MAX_VALUE;
int sum = 0;
int leftBoundary = 0;
for(int i = 0, len = nums.length; i < len; i++){
sum += nums[i];
while(sum >= target){
subLen = (i-leftBoundary+1< subLen ? i-leftBoundary+1 : subLen);
sum -= nums[leftBoundary++];
}
}
return subLen == Integer.MAX_VALUE ? 0 : subLen;
}
}
注意点:细心点,两次写都忘记相加的是nums[i]而写了相加i
59. 螺旋矩阵 II
题目内容:给你一个正整数 n ,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。
大写的懵逼
解题思路
1、循环次数是n/2
- 奇数次时每次中间的变量会不被设置到,偶数次可以刚好循环完。
2、设置一个变量记录每次循环开始的起始点位置。
3、处理一圈四条边的时候要保持循环不变量。
解题代码
class Solution {
public int[][] generateMatrix(int n) {
int loop = 0; // 控制循环次数
int[][] res = new int[n][n];
int start = 0; // 每次循环的开始点(start, start)
int count = 1; // 定义填充数字
int i, j;
while (loop++ < n / 2) { // 判断边界后,loop从1开始
// 模拟上侧从左到右
for (j = start; j < n - loop; j++) {
res[start][j] = count++;
}
// 模拟右侧从上到下
for (i = start; i < n - loop; i++) {
res[i][j] = count++;
}
// 模拟下侧从右到左
for (; j >= loop; j--) {
res[i][j] = count++;
}
// 模拟左侧从下到上
for (; i >= loop; i--) {
res[i][j] = count++;
}
start++;
}
if (n % 2 == 1) {
res[start][start] = count;
}
return res;
}
}
还是不太会
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端