【九月打卡】第18天 算法(1)
標(biāo)簽:
JavaScript
课程名称:2周刷完100道前端优质面试真题
课程章节:第2章 前端面试技能拼图1 :数据结构和算法(上),大厂面试必考
主讲老师:双越
课程内容:
今天学习的内容包括:
2-3 科普-时间复杂度
2-4 科普-空间复杂度
2-7 判断一个字符串是否括号匹配
2-8 用两个栈实现一个队列
这一章主要是讲算法两个度量标准和栈队列链表的算法题,这两题主要还是操作数组。
课程收获:
时间复杂度:程序执行时计算量度量 O(1) < O(logn) < O(n) < O(nlogn) < O(n^2)
空间复杂度:程序执行时需要占用内存度量
-
括号匹配
这个就是利用栈,三中括号一一对应,每个正括号入栈,遇到对应反括号则判断与栈顶是否匹配,匹配则出栈。反括号无法匹配或者最后栈内还有正括号则括号匹配失败。
const isMatchBracket = (str) => {
const l = ['{', '[', '('];
const r = ['}', ']', ')'];
const lTor = {
'{': '}',
'[': ']',
'(': ')'
}
let len = str.length;
let stack = [];
for (let i = 0; i < len; i++) {
let item = str[i];
if (l.includes(item)) {
stack.push(item);
} else if (r.includes(item)){
let head = stack.pop();
if (lTor[head] !== item) {
return false;
}
}
}
return !stack.length
}
console.info(1, isMatchBracket('{a(b[c]d)e}f'));
console.info(2, isMatchBracket('{a}(b[c]d)e}f'));
console.info(3, isMatchBracket('a}(b[c]d)e}f'));
console.info(4, isMatchBracket(''));
-
两个栈拼队列
队列是先进先出,栈先进后出
两个栈拼队列思路:
用两个栈,一个用来入队,入队即入栈;一个用来出队,栈内为空的时候则把第一个栈的出栈元素,入栈到第二个栈,此刻第二个栈的顺序相对于之前的顺序翻转,故第二个栈出栈即为正确的出队顺序。
class Queue {
constructor() {
this.sAppend = [];
this.sDelete = [];
}
append(item) {
this.sAppend.push(item);
}
delete() {
if (!this.sDelete.length) {
while (this.sAppend.length) {
let head = this.sAppend.pop();
this.sDelete.push(head);
}
}
return this.sDelete.pop() ?? -1;
}
}
let q = new Queue();
q.append(100);
// q.append(200);
// q.append(300);
console.log(q.delete());
console.log(q.delete());
以上,结束。
點(diǎn)擊查看更多內(nèi)容
為 TA 點(diǎn)贊
評(píng)論
評(píng)論
共同學(xué)習(xí),寫(xiě)下你的評(píng)論
評(píng)論加載中...
作者其他優(yōu)質(zhì)文章
正在加載中
感謝您的支持,我會(huì)繼續(xù)努力的~
掃碼打賞,你說(shuō)多少就多少
贊賞金額會(huì)直接到老師賬戶(hù)
支付方式
打開(kāi)微信掃一掃,即可進(jìn)行掃碼打賞哦
今天注冊(cè)有機(jī)會(huì)得
100積分直接送
付費(fèi)專(zhuān)欄免費(fèi)學(xué)
大額優(yōu)惠券免費(fèi)領(lǐng)