为了账号安全,请及时绑定邮箱和手机立即绑定

【九月打卡】第18天 算法(1)

标签:
JavaScript

课程名称2周刷完100道前端优质面试真题
课程章节:第2章 前端面试技能拼图1 :数据结构和算法(上),大厂面试必考
主讲老师双越
课程内容
今天学习的内容包括:
2-3 科普-时间复杂度
2-4 科普-空间复杂度
2-7 判断一个字符串是否括号匹配
2-8 用两个栈实现一个队列
这一章主要是讲算法两个度量标准和栈队列链表的算法题,这两题主要还是操作数组。

课程收获
时间复杂度:程序执行时计算量度量 O(1) < O(logn) < O(n) < O(nlogn) < O(n^2)
空间复杂度:程序执行时需要占用内存度量

  • 括号匹配

这个就是利用栈,三中括号一一对应,每个正括号入栈,遇到对应反括号则判断与栈顶是否匹配,匹配则出栈。反括号无法匹配或者最后栈内还有正括号则括号匹配失败。

const isMatchBracket = (str) => {
  const l = ['{', '[', '('];
  const r = ['}', ']', ')'];
  const lTor = {
    '{': '}',
    '[': ']',
    '(': ')'
  }
  let len = str.length;
  let stack = [];
  for (let i = 0; i < len; i++) {
    let item = str[i];
    if (l.includes(item)) {
      stack.push(item);
    } else if (r.includes(item)){
      let head = stack.pop();
      if (lTor[head] !== item) {
        return false;
      }
    }
  }
  return !stack.length
}
console.info(1, isMatchBracket('{a(b[c]d)e}f'));
console.info(2, isMatchBracket('{a}(b[c]d)e}f'));
console.info(3, isMatchBracket('a}(b[c]d)e}f'));
console.info(4, isMatchBracket(''));
  • 两个栈拼队列

队列是先进先出,栈先进后出
两个栈拼队列思路:
用两个栈,一个用来入队,入队即入栈;一个用来出队,栈内为空的时候则把第一个栈的出栈元素,入栈到第二个栈,此刻第二个栈的顺序相对于之前的顺序翻转,故第二个栈出栈即为正确的出队顺序。

  class Queue {
    constructor() {
      this.sAppend = [];
      this.sDelete = [];
    }
    append(item) {
      this.sAppend.push(item);
    }
    delete() {
      if (!this.sDelete.length) {
        while (this.sAppend.length) {
          let head = this.sAppend.pop();
          this.sDelete.push(head);
        }
      }
      return this.sDelete.pop() ?? -1;
    }
  }
  let q = new Queue();
  q.append(100);
  // q.append(200);
  // q.append(300);
  console.log(q.delete());
  console.log(q.delete());


以上,结束。

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消