代码随想录算法训练营第三天 | Javascript | 补-27. 移除元素、补-209. 长度最小的子数组、补-59. 螺旋矩阵 ||、补-58. 区间和

目录

简介

题目链接:27. 移除元素

题目链接:209. 长度最小的子数组

题目链接:59. 螺旋矩阵 II

题目链接:58. 区间和


简介

本人是小几年经验的前端开发,算法基础只有力扣几十道题,非常薄弱。

今天是个人的代码随想录算法打卡第三天,周日,落下的不多了,一口气追上。

黑神话悟空最近刚出,送大家一句歌词里的话:踏平坎坷成大道,斗罢艰险又出发!

今天看到一句话挺有意思送给道友们:自律的尽头是自控,自控的尽头是硬控。哈哈哈~

题目链接: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)
    }
    
});

总结:

  • 数组的算法题,要是涉及到求关于子数组的,先把思路往滑动窗口靠。
  • 矩阵的算法题,每次边界处理都规定成左闭右开,就不容易搞蒙。
  • 6
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值