返回顶部
首页 > 资讯 > 前端开发 > JavaScript >JavaScript算法面试题
  • 685
分享到

JavaScript算法面试题

2024-04-02 19:04:59 685人浏览 独家记忆
摘要

目录有效的括号问题解题信息暴力消除法栈解题法结尾前言: 现实总是残酷的,最近有个学妹在换工作,面试前什么手写Priomise、Vue双向绑定原理,webpack优化方式,准备了一大堆

前言:

现实总是残酷的,最近有个学妹在换工作,面试前什么手写Priomise、Vue双向绑定原理,webpack优化方式,准备了一大堆,本以为成竹在胸,结果却在算法上吃了大亏,心仪的offer没有拿到,一度怀疑人生。到底是什么算法题能让面试官对妹子说出你都工作3年了,这个算法题都不会?这样的狠话?

有效的括号问题

这是一道LeetCode上的原题,本意是在考察候选人对数据结构的掌握。来看看题目

给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。 有效字符串需满足:

  • 左括号必须用相同类型的右括号闭合。
  • 左括号必须以正确的顺序闭合。

示例:


示例 1:
输入:s = "()"
输出:true

示例 2:
输入:s = "()[]{}"
输出:true

示例 3:
输入:s = "(]"
输出:false

示例 4:
输入:s = "([)]"
输出:false

示例 5:
输入:s = "{[]}"
输出:true

解题信息

如果咱们确实没有刷过算法,不知道那么多套路,通过题目和示例尽可能的获取到更多的信息就很重要了。

根据题目推断出:

  • 字符串s的长度一定是偶数,不可能是奇数(一对对匹配)。
  • 右括号前面一定跟着左括号,才符合匹配条件,具备对称性。
  • 右括号前面如果不是左括号,一定不是有效的括号。

暴力消除法

得到了以上这些信息后,胖头鱼想既然是[]{}()成对的出现,我能不能把他们都挨个消除掉,如果最后结果是空字符串,那不就意味着符合题意了吗?

举个例子:

输入:s = "{[()]}"

第一步:可以消除()这一对,结果s还剩{[]}

第二步: 可以消除[]这一对,结果s还剩{}

第三步: 可以消除{}这一对,结果s还剩'' 所以符合题意返回true

代码实现:

const isValid = (s) => {
  while (true) {
    let len = s.length
    // 将字符串按照匹配对,挨个替换为''
    s = s.replace('{}', '').replace('[]', '').replace('()', '')
    // 有两种情况s.length会等于len
    // 1. s匹配完了,变成了空字符串
    // 2. s无法继续匹配,导致其长度和一开始的len一样,比如({],一开始len是3,匹配完还是3,说明不用继续匹配了,结果就是false
    if (s.length === len) {
      return len === 0
    }
  }
}

暴力消除法最终还是可以通过leetcode的用例,就是性能差了点,哈哈

image.png

栈解题法

解题信息中的第2条强调对称性,而栈(后入先出)入栈和出栈恰好是反着来,形成了鲜明的对称性。

入栈:abc,出栈:cba

abc
cba

所以可以试试从的角度来解析:

输入:s = "{[()]}"

第一步:读取ch = {,属于左括号,入栈,此时栈内有{
第二步:读取ch = [,属于左括号,入栈,此时栈内有{[
第三步:读取ch = (,属于左括号,入栈,此时栈内有{[(
第四步:读取ch = ),属于右括号,尝试读取栈顶元素(和)正好匹配,将(出栈,此时栈内还剩{[
第五步:读取ch = ],属于右括号,尝试读取栈顶元素[和]正好匹配,将[出栈,此时栈内还剩{
第六步:读取ch = },属于右括号,尝试读取栈顶元素{和}正好匹配,将{出栈,此时栈内还剩''
第七步:栈内只能'',s = "{[()]}"符合有效的括号定义,返回true

代码实现:

const isValid = (s) => {
  // 空字符串符合条件
  if (!s) {
    return true
  }

  const leftToRight = {
    '(': ')',
    '[': ']',
    '{': '}'
  }
  const stack = []

  for (let i = 0, len = s.length; i < len; i++) {
    const ch = s[i]
    // 左括号
    if (leftToRight[ch]) {
      stack.push(ch)
    } else {
      // 右括号开始匹配
      // 1. 如果栈内没有左括号,直接false
      // 2. 有数据但是栈顶元素不是当前的右括号
      if (!stack.length || leftToRight[ stack.pop() ] !== ch) {
        return false
      }
    }
  }

  // 最后检查栈内还有没有元素,有说明还有未匹配则不符合
  return !stack.length
}

暴力解法虽然符合我们日常的思维,但是果然还是栈结构解法好了不少。

image.png

结尾

面试中,算法到底该不该成为考核候选人的重要指标咱们不吐槽,但是近几年几乎每个大厂都将算法放进了前端面试的环节,为了获得心仪的offer,重温数据结构,刷刷题还是很有必要的,愿你我都被算法温柔以待。

到此这篇关于javascript算法面试题汇总的文章就介绍到这了,更多相关JavaScript算法内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: JavaScript算法面试题

本文链接: https://lsjlt.com/news/146377.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • JavaScript算法面试题
    目录有效的括号问题解题信息暴力消除法栈解题法结尾前言: 现实总是残酷的,最近有个学妹在换工作,面试前什么手写Priomise、vue双向绑定原理,webpack优化方式,准备了一大堆...
    99+
    2024-04-02
  • php算法面试题有哪些
    这篇文章主要介绍php算法面试题有哪些,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!php有什么用php是一个嵌套的缩写名称,是英文超级文本预处理语言,它的语法混合了C、Java、Perl以及php自创新的语法,主要...
    99+
    2023-06-14
  • php算法面试题及答案
    PHP的基础知识点 PHP中类的继承属于单继承,一个子类只能继承一个父类。可见性为public protected的属性和方法可以被继承。 继承的方法或属性可以被重写,可见性越来越大。 PHP中的变量名区分大小写,但类名、函数名不区分大小...
    99+
    2023-08-31
    php 服务器 开发语言
  • Python算法面试题有哪些
    本篇内容介绍了“Python算法面试题有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!25匹马,有一条只能5匹马比赛的赛道,我们无法计时...
    99+
    2023-06-02
  • Javascript 面试题随笔
    复制代码 代码如下: var Fundamental = {count:1}; function Test(){} Test.prototype = Fundamental; Tes...
    99+
    2022-11-21
    面试题
  • JavaScript有哪些面试题
    这篇文章主要讲解了“JavaScript有哪些面试题”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“JavaScript有哪些面试题”吧!1.创建JavaSc...
    99+
    2024-04-02
  • JavaScript面试题有哪些
    这篇文章主要为大家展示了“JavaScript面试题有哪些”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“JavaScript面试题有哪些”这篇文章吧。问题1:J...
    99+
    2024-04-02
  • C#算法面试题的示例分析
    这篇文章主要为大家展示了“C#算法面试题的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“C#算法面试题的示例分析”这篇文章吧。C#算法一道面试题:程序设计: 猫大叫一声,所有的老鼠都开始...
    99+
    2023-06-18
  • 云计算面试题及答案,云计算岗位精品面试题
    云计算现在发展前景很好,很多人都会选择云计算。但是学完云计算如何面试成功也是重要的一环。这次在本文就为大家带来云计算面试及答案,希望能够对大家找工作的征程有所助益。针对云计算工程师,现在业内也有不少开放认证的公司,比如AWS、Azure、M...
    99+
    2023-06-04
  • ASP索引和JavaScript面试问题?——ASP索引和JavaScript面试问题全面解析
    在现代互联网的开发中,ASP索引和JavaScript已经成为两项非常重要的技术。因此,在面试ASP和JavaScript开发人员时,常常会涉及到这两个技术的问题。下面我们就来全面解析ASP索引和JavaScript面试问题。 一、ASP...
    99+
    2023-07-21
    索引 面试 javascript
  • java笔试手写算法面试题大全含答案
    1.统计一篇英文文章单词个数。public class WordCounting { public static void main(String[] args) { try(FileReader fr = new ...
    99+
    2017-08-02
    java面试题 java
  • 面试常见的js算法题有哪些
    这篇文章主要介绍面试常见的js算法题有哪些,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!1.排序一般都是给个数组然后排序,有的从小到大,有的从大到小。一定要看清楚。以下都是从小到大的...
    99+
    2024-04-02
  • Java面试题之算法的示例分析
    小编给大家分享一下Java面试题之算法的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!面试题1:你说一下常用的排序算法都有哪些?追问1:谈一谈你对快排的理...
    99+
    2023-06-20
  • 常见的PHP算法面试题有哪些
    这篇文章将为大家详细讲解有关常见的PHP算法面试题有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。插入排序(一维数组) 基本思想:每次将一个待排序的数据元素,插入到前面已经排好序的数列中的适当位置,使...
    99+
    2023-06-15
  • 分享JavaScript常见面试题
    这篇文章主要讲解了“分享JavaScript常见面试题”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“分享JavaScript常见面试题”吧!一、请解释 Ja...
    99+
    2024-04-02
  • Javascript程序员面试试题有哪些
    这篇文章将为大家详细讲解有关Javascript程序员面试试题有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。闭包:function fun(n,o)&nb...
    99+
    2024-04-02
  • 前端面试中字节的笔试题和算法题示例分析
    这篇文章将为大家详细讲解有关字节的笔试题和算法题示例分析,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。题目给定一个包含 m x n 个元素的矩阵(m 行, ...
    99+
    2024-04-02
  • JS面试中常见的算法题有哪些
    这篇文章主要讲解了“JS面试中常见的算法题有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“JS面试中常见的算法题有哪些”吧! 1.验证一个数是否是素数...
    99+
    2024-04-02
  • Java面试题冲刺第二十天--算法(1)
    目录手撸算法1:查找数组中重复元素和重复元素的个数1. 两层循环比较方式2. 转成Map集合处理方式手撸算法2:写个二分查找demo吧手撸算法3:把两个有序数组合并成一个有序数组总结...
    99+
    2024-04-02
  • web前端面试常见算法题有哪些
    这篇“web前端面试常见算法题有哪些”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“web前...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作