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