滑动窗口
leetcode链接:leetcode.cn/problems/mi…
看到题目想到的就是暴力解法,不过暴力写法也是写的有点磕磕绊绊的,提交上去还超时了。。。
滑动窗口可以理解为是一种双指针
Day1中的移除元素中就说过,双指针一定要明确两个指针分别代表的作用 (我就是没彻底理解,导致代码写不出来),以及for循环使用哪个指针做索引
两个指针的作用:
起始指针:慢慢靠近结束指针,找到长度最小的子数组的开始下标
结束指针:找到符合条件的子数组的末尾下标
螺旋矩阵
leetcode链接:leetcode.cn/problems/sp…
卡哥在题目中明确提示了用到了二分搜索中提到的区间定义,那就左闭右闭和左闭右开
顺着左闭右开的思路,可以明确知道绕一圈,有四段区间要处理
开始的时候,没考虑到奇数要处理,看了卡哥的开头视频讲解后,这道题目就AC了
不过我的模拟过程和卡哥不太一样,周末研究下两者的区别吧
var generateMatrix = function(n) {
let k = 1;
// 创建一个空的二维数组
let nums = new Array(n).fill(0);
const matrix = nums.map((item) => item = new Array(n).fill(0));
for (let offset = 0;offset < n - 1; offset++) {
let i = offset;
let j = offset;
while (i === offset && j < n - 1 - offset) {
matrix[i][j] = k++;
j++;
}
while (i < n - 1 - offset && j === n - 1 - offset) {
matrix[i][j] = k++;
i++;
}
while (i === n - 1 - offset && (offset < j && j <= n - 1 - offset)) {
matrix[i][j] = k++;
j--;
}
while ((offset < i && i <= n - 1 - offset) && j === offset) {
matrix[i][j] = k++;
i--;
}
}
if (n % 2 === 1) {
mid = Math.floor(n/2);
matrix[mid][mid] = k;
}
return matrix;
};