摘要:昨天聊了一個(gè)算法題,今天接著聊多聊幾個(gè)。如果是是數(shù)組那么遞歸執(zhí)行,并把當(dāng)前和已有傳進(jìn)去繼續(xù)。如果不是直接到第二種,邏輯一樣只不過遍歷換成了,如果讀的比較困難請(qǐng)移步了解第三種比較簡(jiǎn)單會(huì)默認(rèn)過濾數(shù)組內(nèi)部,算是一個(gè)奇淫技巧。
昨天聊了一個(gè)算法題,今天接著聊!多聊幾個(gè)。
1、拍平數(shù)組(多維數(shù)組變成一維數(shù)組)
let arr = [1,[2,3,[4],[5,6,[7]]],8]//[1,2,3,4,5,6,7,8] //這個(gè)有很多方法,我們一一說來 //第一種遍歷數(shù)組,遍歷過程遇到數(shù)組遞歸。 function flatten(arr, newArr) { //省去全局變量,還避開了函數(shù)嵌套閉包的形成。 newArr = newArr || [] for (let i = 0; i < arr.length; i++) { //如果是arr[i]是數(shù)組那么遞歸執(zhí)行,并把當(dāng)前arr[i]和已有newArr傳進(jìn)去繼續(xù)push。 //如果不是直接push到newArr typeof arr[i] === "object" ? flatten(arr[i], newArr) : newArr.push(arr[i]) } return newArr } console.log(flatten(arr)) //第二種,邏輯一樣只不過遍歷換成了reduce,如果讀的比較困難請(qǐng)移步:https://segmentfault.com/a/1190000017510301 了解reduce function flatten1(arr) { return arr.reduce((newArr, item) => { return typeof item === "object" ? newArr.concat(flatten1(item, newArr)) : (newArr.push(item), newArr) }, []) } console.log(flatten1(arr)) //第三種比較簡(jiǎn)單 function flatten2(arr) { //join會(huì)默認(rèn)過濾數(shù)組內(nèi)部[],算是一個(gè)奇淫技巧。 return arr.join(",").split(",") } console.log(flatten2(arr)) //第三種稍有點(diǎn)問題,如果數(shù)組內(nèi)是number類型會(huì)拍平后會(huì)變成字符串。
2、寫一個(gè)方法判斷字符串內(nèi)()是否成對(duì)出現(xiàn),是返回true不是返回false
let str = "(()()())" let str1 = "(())()())" //1、先用棧的思路解決 function isTure(str, result = []) { let arr = str.split("") for (let i = 0; i < arr.length; i++) { const item = arr[i]; // 如果是左括號(hào)直接壓棧 if (item === "(") { // 壓棧 result.push(item); // 如果是右括號(hào)且當(dāng)前arr不為空彈出棧頂 } else if (item === ")" && result.length != 0) { // 彈出棧頂 result.pop() } else { //如果是右括號(hào)且當(dāng)前result為空,則直接判定為不合法 return false } } return result ? true : false } console.log(isTure(str)) //true console.log(isTure(str1)) //false 2、用計(jì)數(shù)方式其實(shí)和棧原理類似 function isTure1(str, count = 0) { let arr = str.split("") for (let i = 0; i < arr.length; i++) { const item = arr[i]; if (item === "(") { count++ } else if (item === ")" && count != 0) { count-- } else { return false } } return !count ? true : false } console.log(isTure1(str))//true console.log(isTure1(str1))//false
ok 今天分享就到這,明天繼續(xù)!
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://hztianpu.com/yun/101426.html
摘要:今天開始,我從面試題切入開始做一些詳解和記錄,爭(zhēng)取每個(gè)工作日一篇?dú)g迎關(guān)注吐槽要求以對(duì)象的大小排序返回問題解析對(duì)象是無序的,我們需要轉(zhuǎn)為有序數(shù)據(jù)結(jié)構(gòu),其實(shí)也就是轉(zhuǎn)為數(shù)組然后后再去排序。 今天開始,我從面試題切入開始做一些詳解和記錄,爭(zhēng)取每個(gè)工作日一篇!歡迎關(guān)注吐槽! const obj = { a: 1, b: 3, ...
摘要:引擎對(duì)堆內(nèi)存中的對(duì)象進(jìn)行分代管理新生代存活周期較短的對(duì)象,如臨時(shí)變量字符串等。內(nèi)存泄漏對(duì)于持續(xù)運(yùn)行的服務(wù)進(jìn)程,必須及時(shí)釋放不再用到的內(nèi)存。 (關(guān)注福利,關(guān)注本公眾號(hào)回復(fù)[資料]領(lǐng)取優(yōu)質(zhì)前端視頻,包括Vue、React、Node源碼和實(shí)戰(zhàn)、面試指導(dǎo)) 本周正式開始前端進(jìn)階的第一期,本周的主題是調(diào)用堆棧,今天是第4天。 本計(jì)劃一共28期,每期重點(diǎn)攻克一個(gè)面試重難點(diǎn),如果你還不了解本進(jìn)階計(jì)劃...
摘要:進(jìn)階期理解中的執(zhí)行上下文和執(zhí)行棧進(jìn)階期深入之執(zhí)行上下文棧和變量對(duì)象但是今天補(bǔ)充一個(gè)知識(shí)點(diǎn)某些情況下,調(diào)用堆棧中函數(shù)調(diào)用的數(shù)量超出了調(diào)用堆棧的實(shí)際大小,瀏覽器會(huì)拋出一個(gè)錯(cuò)誤終止運(yùn)行。 (關(guān)注福利,關(guān)注本公眾號(hào)回復(fù)[資料]領(lǐng)取優(yōu)質(zhì)前端視頻,包括Vue、React、Node源碼和實(shí)戰(zhàn)、面試指導(dǎo)) 本周正式開始前端進(jìn)階的第一期,本周的主題是調(diào)用堆棧,今天是第3天。 本計(jì)劃一共28期,每期重點(diǎn)攻...
閱讀 1949·2021-10-27 14:15
閱讀 4250·2021-10-08 10:12
閱讀 1364·2021-09-22 15:55
閱讀 3396·2021-09-22 15:17
閱讀 1037·2021-09-02 15:40
閱讀 1919·2019-08-29 18:33
閱讀 1237·2019-08-29 15:22
閱讀 2499·2019-08-29 11:08