继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

【学习打卡】第1天 数据结构之“栈”

风吹尘
关注TA
已关注
手记 61
粉丝 9
获赞 1

课程名称:JavaScript版数据结构与算法
课程章节:第3章 数据结构之“栈”
主讲老师:lewis

课程内容:

今天学习的内容包括:
3-1 栈简介——可以用Array实现栈,后进先出规则。
3-2 什么场景下用栈——后进先出场景,比如十进制转二进制、判断字符串的括号是否有效、函数调用堆栈等。
3-3 LeetCode:20.有效的括号——使用栈特性实现判断 “括号” 字符串是否有效。

课程收获:

如何使用Array实现一个栈的入栈出栈呢?

const stack = [];  
  
stack.push(1); // 入栈  
stack.push(2); // 入栈  
  
const item1 = stack.pop(); // 出栈 2先出  
const item2 = stack.pop(); // 出栈 1再出  

有效的括号:

有效字符串需满足:
1.左括号必须用相同类型的右括号闭合。
2.左括号必须以正确的顺序闭合。

使用栈的后进先出正好可以判断是否有效:
1.新建一个栈。
2.扫描字符串,遇左括号入栈,遇到和栈顶括号类型匹配的右括号就出栈,类型不匹配直接判定为不合法。
3.最后栈空了就合法,否则不合法。

/**
 * @param {string} s
 * @return {boolean}
 */
var isValid = function(s) {
    if(s.length%2===1) return false
    const stack = []
    for(let i =0;i<s.length;i++){
        const c = s[i]
        if(c === '(' || c === '{' || c === '['){
            stack.push(c)
        }else{
            const t = stack[stack.length-1]
            if(
                (t==='(' && c === ')') ||
                (t==='{' && c === '}') ||
                (t==='[' && c === ']')
            ){
                stack.pop()
            }else{
                return false
            }
        }
    }
    return stack.length === 0
};

执行用时: 56 ms , 在所有 JavaScript 提交中击败了 91.74% 的用户
内存消耗: 42 MB , 在所有 JavaScript 提交中击败了 18.03% 的用户

还有很大的提升空间,感受到了算法的魅力,还需继续学习算法,以便后续写出优质的代码。

学习需要坚持,昨天就忘记打卡了,今天重新来过😭 ~

坚持打卡,坚持学习!明天见💪~

http://img3.sycdn.imooc.com/62ea7fed0001494919200892.jpg

http://img1.sycdn.imooc.com/62ea80910001a5a219200892.jpg

打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP