目录
简介
本人是小几年经验的前端开发,算法基础只有力扣几十道题,非常薄弱。
今天是个人的代码随想录算法打卡第三天,周日,落下的不多了,一口气追上。
黑神话悟空最近刚出,送大家一句歌词里的话:踏平坎坷成大道,斗罢艰险又出发!
今天看到一句话挺有意思送给道友们:自律的尽头是自控,自控的尽头是硬控。哈哈哈~
题目链接:27. 移除元素
因为做过一开始打算直接撸,用了很蠢的暴力。看了视频突然想起来用双指针,mark一下:用快慢指针。
题目链接:209. 长度最小的子数组
之前依稀记得要用滑动窗口,没看题解自己做,犯了两个错误:
- if要改成while,因为要一直循环更新左窗口直到当前和小于target
- 题目要求找不到返回0,所以应该是return minLength === Infinity ? 0 : minLength
题目链接:59. 螺旋矩阵 II
之前做过一遍,依稀记得每条边需要处理成左闭右开。
题目链接:58. 区间和
就是用前缀和,推导公式sum = p[b] - p[a-1]很重要。写输入输出有点麻烦。。。
const readline = require('readline');
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout,
terminal: false
});
let n;
let array = [];
let queries = [];
let isReadingArray = true;
rl.on('line', (line) => {
if (!n) {
n = parseInt(line);
} else if (isReadingArray && array.length < n) {
array.push(parseInt(line));
if (array.length === n) {
isReadingArray = false;
}
} else {
const [a, b] = line.split(' ').map(Number);
queries.push([a, b]);
}
});
rl.on('close', () => {
// p[] 用来存储到i的前缀和
let p = Array(array.length).fill(0);
p[0] = array[0];
let sum = 0;
for(let i = 1; i < array.length; i++){
p[i] = p[i - 1] + array[i];
}
for(const[a, b] of queries){
if(a === 0) sum = p[b];
else{
sum = p[b] - p[a - 1];
}
console.log(sum)
}
});
总结:
- 数组的算法题,要是涉及到求关于子数组的,先把思路往滑动窗口靠。
- 矩阵的算法题,每次边界处理都规定成左闭右开,就不容易搞蒙。