207.长度最小的子数组
题目链接:207.长度最小的子数组
思路:滑动窗口,题目没有说明是否为连续数组,做题时纠结了好久
题解:
/**
* @param {number} target
* @param {number[]} nums
* @return {number}
*/
var minSubArrayLen = function(target, nums) {
let ans = nums.length + 1;
let sum = 0;
let left = 0;
for (let right = left; right < nums.length; right++) {
sum += nums[right];
while (sum >= target) {
ans = Math.min(ans, right - left + 1);
sum -= nums[left];
left++;
}
}
return ans === nums.length + 1 ? 0 : ans;
};
59.螺旋矩阵
题目链接:59.螺旋矩阵
思路:初看题,题目很熟悉,只能想到模拟,但是脑子没有清晰的逻辑,看了代码随想录端的思路后,总结如下
顺时针画矩阵分为四行,
上行,从左到右,
右行,从上到下,
下行,从右到左,
左行,从下到上
坚持左闭右开,从外圈一圈一圈往里画,如果是奇数,最中间需单独写入数字
题解:
/**
* @param {number} n
* @return {number[][]}
*/
var generateMatrix = function(n) {
let startX = 0;
let startY = 0;
let offset = 1;
let count = 1;
let loop = Math.floor(n / 2);
let ans = new Array(n).fill().map(item => []);
while(loop--) {
let row = startX;
let col = startY;
// 上
for (; col < n - offset; col++) {
ans[row][col] = count++;
}
// 右
for (; row < n - offset; row++) {
ans[row][col] = count++;
}
// 下
for (; col > startX; col--) {
ans[row][col] = count++;
}
// 左
for (; row > startY; row--) {
ans[row][col] = count++;
}
startX++;
startY++;
offset++;
}
if ( n % 2 !== 0) {
let center = Math.floor(n / 2);
ans[center][center] = count++;
};
return ans;
};