题目
- 977.有序数组的平方
- 209.长度最小的子数组
- 59.螺旋矩阵II
- 总结
- 建议大家先独立做题,然后看视频讲解,然后看文章讲解,然后在重新做一遍题,把题目AC,最后整理成今日当天的博客
- 拓展题目可以先不做
详细布置
977.有序数组的平方
题目建议: 本题关键在于理解双指针思想
题目链接:leetcode.cn/problems/sq… 文章讲解:programmercarl.com/0977.%E6%9C… 视频讲解: www.bilibili.com/video/BV1QB…
var sortedSquares = function (nums) {
let res = [];
let left = 0,
right = nums.length - 1;
while (left <= right) {
const leftNum = Math.abs(nums[left]);
const rightNum = Math.abs(nums[right]);
if(rightNum>leftNum) {
res.unshift(rightNum*rightNum);
right --;
} else {
res.unshift(leftNum*leftNum);
left ++ ;
}
}
return res
};
const nums = [-7, -3, 2, 3, 11];
console.log(sortedSquares(nums));
209.长度最小的子数组
题目建议: 本题关键在于理解滑动窗口,这个滑动窗口看文字讲解 还挺难理解的,建议大家先看视频讲解。 拓展题目可以先不做。
题目链接:leetcode.cn/problems/mi… 文章讲解:programmercarl.com/0209.%E9%95… 视频讲解:www.bilibili.com/video/BV1tZ…
var minSubArrayLen = function (target, nums) {
let result = Number.MAX_SAFE_INTEGER; // 或者定义比nums的长度大1都可以
let subLen = 0;
let sum = 0;
let i = 0;
for (let j = 0; j < nums.length; j++) {
sum += nums[j];
while (sum >= target) {
subLen = j - i + 1;
result = subLen < result ? subLen : result;
sum -= nums[i];
i++;
}
}
return result === Number.MAX_SAFE_INTEGER ? 0 : result;
};
59.螺旋矩阵II
题目建议: 本题关键还是在转圈的逻辑,在二分搜索中提到的区间定义,在这里又用上了。
题目链接:leetcode.cn/problems/sp… 文章讲解:programmercarl.com/0059.%E8%9E… 视频讲解:www.bilibili.com/video/BV1SL…
总结
- 题目建议:希望大家 也做一个自己 对数组专题的总结
- 文章链接:programmercarl.com/%E6%95%B0%E…
/**
* @param {number} n
* @return {number[][]}
*/
var generateMatrix = function(n) {
let startY = (startX = 0);
let loop = Math.floor(n / 2);
let mid = Math.floor(n / 2);
let offset = 1;
let count = 1;
let res = new Array(n).fill(0).map((el) => new Array(n).fill(0));
while (loop--) {
let row = startX, col = startY;
// (左闭右开)
// 上行从左到右
while (col < n - offset) {
res[row][col] = count++;
col++;
}
// 右列从上到下
while (row < n - offset) {
res[row][col] = count++;
row++;
}
// 下行从右到左
while (col > startY) {
res[row][col] = count++;
col--;
}
// 左列从下到上
while (row > startX) {
res[row][col] = count++;
row--;
}
startX++;
startY++;
offset += 1;
}
if (n % 2 === 1) {
res[mid][mid] = count;
}
return res;
};