亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

JavaScript算法面試題

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

前言:

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

有效的括號問題

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

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

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

示例:

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

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

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

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

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

解題信息

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

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

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

暴力消除法

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

舉個例子:

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

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

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

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

代碼實現(xiàn):

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

暴力消除法最終還是可以通過leetcode的用例,就是性能差了點,哈哈

image.png

棧解題法

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

入棧:abc,出棧:cba

abc
cba

所以可以試試從的角度來解析:

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

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

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

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

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

image.png

結(jié)尾

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

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

相關(guān)文章

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

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

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

    微信小程序時間軸組件的示例代碼

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

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

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

    flv.js的具體使用教程

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

    前端項目npm?install?安裝依賴報錯的解決方案(三種問題解決方案)

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

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

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

    js實現(xiàn)自動鎖屏功能

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

    js 彈出層 并可以拖拽

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

    JS中cookie的使用及缺點講解

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

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

    我們在獲取一組頁面元素時常會用到getElementsByName()或是getElementsByTagName()方法。
    2010-05-05

最新評論