欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

JavaScript算法面試題

 更新時(shí)間:2022年04月18日 14:41:46   作者:前端胖頭魚  
這篇文章主要給大家分享的是JavaScript算法面試題匯總,文章舉例清晰內(nèi)容詳細(xì),具有一定的參考價(jià)值,需要的小伙伴可以參考一下

前言:

現(xiàn)實(shí)總是殘酷的,最近有個(gè)學(xué)妹在換工作,面試前什么手寫Priomise、vue雙向綁定原理,webpack優(yōu)化方式,準(zhǔn)備了一大堆,本以為成竹在胸,結(jié)果卻在算法上吃了大虧,心儀的offer沒(méi)有拿到,一度懷疑人生。到底是什么算法題能讓面試官對(duì)妹子說(shuō)出你都工作3年了,這個(gè)算法題都不會(huì)?這樣的狠話?

有效的括號(hào)問(wèn)題

這是一道leetcode上的原題,本意是在考察候選人對(duì)數(shù)據(jù)結(jié)構(gòu)的掌握。來(lái)看看題目

給定一個(gè)只包括 '(',')','{','}','[',']' 的字符串 s ,判斷字符串是否有效。 有效字符串需滿足:

  • 左括號(hào)必須用相同類型的右括號(hào)閉合。
  • 左括號(hào)必須以正確的順序閉合。

示例:

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

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

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

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

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

解題信息

如果咱們確實(shí)沒(méi)有刷過(guò)算法,不知道那么多套路,通過(guò)題目和示例盡可能的獲取到更多的信息就很重要了。

根據(jù)題目推斷出:

  • 字符串s的長(zhǎng)度一定是偶數(shù),不可能是奇數(shù)(一對(duì)對(duì)匹配)。
  • 右括號(hào)前面一定跟著左括號(hào),才符合匹配條件,具備對(duì)稱性。
  • 右括號(hào)前面如果不是左括號(hào),一定不是有效的括號(hào)。

暴力消除法

得到了以上這些信息后,胖頭魚想既然是[]、{}()成對(duì)的出現(xiàn),我能不能把他們都挨個(gè)消除掉,如果最后結(jié)果是空字符串,那不就意味著符合題意了嗎?

舉個(gè)例子:

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

第一步:可以消除()這一對(duì),結(jié)果s還剩{[]}

第二步: 可以消除[]這一對(duì),結(jié)果s還剩{}

第三步: 可以消除{}這一對(duì),結(jié)果s還剩'' 所以符合題意返回true

代碼實(shí)現(xiàn):

const isValid = (s) => {
  while (true) {
    let len = s.length
    // 將字符串按照匹配對(duì),挨個(gè)替換為''
    s = s.replace('{}', '').replace('[]', '').replace('()', '')
    // 有兩種情況s.length會(huì)等于len
    // 1. s匹配完了,變成了空字符串
    // 2. s無(wú)法繼續(xù)匹配,導(dǎo)致其長(zhǎng)度和一開始的len一樣,比如({],一開始len是3,匹配完還是3,說(shuō)明不用繼續(xù)匹配了,結(jié)果就是false
    if (s.length === len) {
      return len === 0
    }
  }
}

暴力消除法最終還是可以通過(guò)leetcode的用例,就是性能差了點(diǎn),哈哈

image.png

棧解題法

解題信息中的第2條強(qiáng)調(diào)對(duì)稱性,而棧(后入先出)入棧和出棧恰好是反著來(lái),形成了鮮明的對(duì)稱性。

入棧:abc,出棧:cba

abc
cba

所以可以試試從的角度來(lái)解析:

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

第一步:讀取ch = {,屬于左括號(hào),入棧,此時(shí)棧內(nèi)有{
第二步:讀取ch = [,屬于左括號(hào),入棧,此時(shí)棧內(nèi)有{[
第三步:讀取ch = (,屬于左括號(hào),入棧,此時(shí)棧內(nèi)有{[(
第四步:讀取ch = ),屬于右括號(hào),嘗試讀取棧頂元素(和)正好匹配,將(出棧,此時(shí)棧內(nèi)還剩{[
第五步:讀取ch = ],屬于右括號(hào),嘗試讀取棧頂元素[和]正好匹配,將[出棧,此時(shí)棧內(nèi)還剩{
第六步:讀取ch = },屬于右括號(hào),嘗試讀取棧頂元素{和}正好匹配,將{出棧,此時(shí)棧內(nèi)還剩''
第七步:棧內(nèi)只能'',s = "{[()]}"符合有效的括號(hào)定義,返回true

代碼實(shí)現(xiàn):

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]
    // 左括號(hào)
    if (leftToRight[ch]) {
      stack.push(ch)
    } else {
      // 右括號(hào)開始匹配
      // 1. 如果棧內(nèi)沒(méi)有左括號(hào),直接false
      // 2. 有數(shù)據(jù)但是棧頂元素不是當(dāng)前的右括號(hào)
      if (!stack.length || leftToRight[ stack.pop() ] !== ch) {
        return false
      }
    }
  }

  // 最后檢查棧內(nèi)還有沒(méi)有元素,有說(shuō)明還有未匹配則不符合
  return !stack.length
}

暴力解法雖然符合我們?nèi)粘5乃季S,但是果然還是棧結(jié)構(gòu)解法好了不少。

image.png

結(jié)尾

面試中,算法到底該不該成為考核候選人的重要指標(biāo)咱們不吐槽,但是近幾年幾乎每個(gè)大廠都將算法放進(jìn)了前端面試的環(huán)節(jié),為了獲得心儀的offer,重溫?cái)?shù)據(jù)結(jié)構(gòu),刷刷題還是很有必要的,愿你我都被算法溫柔以待。

到此這篇關(guān)于JavaScript算法面試題匯總的文章就介紹到這了,更多相關(guān)JavaScript算法內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • setInterval 和 setTimeout會(huì)產(chǎn)生內(nèi)存溢出

    setInterval 和 setTimeout會(huì)產(chǎn)生內(nèi)存溢出

    jscript 5.7 發(fā)布修復(fù)了不少ie javascript內(nèi)存泄露的問(wèn)題。但是leak依然存在。當(dāng)我們頻繁使用 setInterval 和 setTimeout 時(shí)就會(huì)每幾秒鐘出現(xiàn)32k leak...
    2008-02-02
  • 微信小程序時(shí)間軸組件的示例代碼

    微信小程序時(shí)間軸組件的示例代碼

    這篇文章主要介紹了微信小程序時(shí)間軸組件,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-05-05
  • JS判斷是否360安全瀏覽器極速內(nèi)核的方法

    JS判斷是否360安全瀏覽器極速內(nèi)核的方法

    這篇文章主要介紹了JS判斷是否360安全瀏覽器極速內(nèi)核的方法,對(duì)比分析了360安全瀏覽器極速內(nèi)核與其他主流瀏覽器內(nèi)核的區(qū)別及對(duì)應(yīng)的判斷技巧,需要的朋友可以參考下
    2015-01-01
  • flv.js的具體使用教程

    flv.js的具體使用教程

    flv.js是一款優(yōu)秀的開源web端flv文件播放器,flv格式目前廣泛應(yīng)用在直播及音視頻錄制領(lǐng)域,本文就詳細(xì)的介紹一下flv.js的具體使用教程,感興趣的可以了解一下
    2023-05-05
  • 前端項(xiàng)目npm?install?安裝依賴報(bào)錯(cuò)的解決方案(三種問(wèn)題解決方案)

    前端項(xiàng)目npm?install?安裝依賴報(bào)錯(cuò)的解決方案(三種問(wèn)題解決方案)

    本文給大家介紹前端項(xiàng)目npm?install?安裝依賴報(bào)錯(cuò)的解決方案(三種問(wèn)題解決方案),給大家總結(jié)了前端項(xiàng)目安裝依賴,遇到過(guò)的問(wèn)題,每一種問(wèn)題給大家完美解決方案,感興趣的朋友一起看看吧
    2023-12-12
  • js實(shí)現(xiàn)仿QQ秀換裝效果的方法

    js實(shí)現(xiàn)仿QQ秀換裝效果的方法

    這篇文章主要介紹了js實(shí)現(xiàn)仿QQ秀換裝效果的方法,實(shí)例分析了javascript操作圖片的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-03-03
  • js實(shí)現(xiàn)自動(dòng)鎖屏功能

    js實(shí)現(xiàn)自動(dòng)鎖屏功能

    有這么一個(gè)需求,開發(fā)了一套系統(tǒng),當(dāng)用戶離開桌面或者一段時(shí)間不操作的話,需要把該系統(tǒng)所有打開頁(yè)面鎖定起來(lái),本文就詳細(xì)的介紹一下,感興趣的可以了解一下
    2021-06-06
  • js 彈出層 并可以拖拽

    js 彈出層 并可以拖拽

    彈出層,并可以拖拽,好多人要,發(fā)出來(lái)共享一下 兼容IE6+, 各現(xiàn)代瀏覽器。
    2011-07-07
  • JS中cookie的使用及缺點(diǎn)講解

    JS中cookie的使用及缺點(diǎn)講解

    Cookie就是這樣的一種機(jī)制。它可以彌補(bǔ)HTTP協(xié)議無(wú)狀態(tài)的不足。在Session出現(xiàn)之前,基本上所有的網(wǎng)站都采用Cookie來(lái)跟蹤會(huì)話。下面通過(guò)本文給大家介紹JS中cookie的使用及缺點(diǎn),需要的朋友參考下吧
    2017-05-05
  • JavaScript 數(shù)據(jù)元素集合與數(shù)組的區(qū)別說(shuō)明

    JavaScript 數(shù)據(jù)元素集合與數(shù)組的區(qū)別說(shuō)明

    我們?cè)讷@取一組頁(yè)面元素時(shí)常會(huì)用到getElementsByName()或是getElementsByTagName()方法。
    2010-05-05

最新評(píng)論