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