chapter05-栈和队列

232.用栈实现队列

tip:栈模拟队列

//输入栈和输出栈
    // push: 压入输入栈
    // pop: 输出栈
    //             ==null,输入栈全部push输出栈,然后从输出栈pop
    //             !=null,直接从输出栈pop
    // peek: 获取输出栈栈顶元素
    // empty: 输出,输入栈,同时为空,true

使用的api:
Stack.class:pop() push() peek() isEmpty()

225. 用队列实现栈

tip:队列模拟栈

    //输出(主)队列,拷贝(辅)队列
    //push:  将新元素插入拷贝队列
    //       输出队列!=null 将输出队列,全部入拷贝队列
    //       que1 que2身份互换(此时,que1的队首就是栈顶)

    //pop: 主队列输出队首(que1的队首就是栈顶)

20. 有效的括号

tip:匹配问题,栈的运用

//分清三种无法匹配的情况 左边多余 中间不匹配 右边多余
//遍历字符串:
		若是左括号,将其对应的右括号入栈
		若是右括号,判断栈顶是否与之匹配,若匹配,出栈;不匹配,false
		若是遍历未结束,栈已经空,则右边多余
		若是遍历结束,栈空,true;反之亦然

1047. 删除字符串中的所有相邻重复项

tip:匹配问题,栈的运用。

//讨论清楚入栈出栈的情况
//遍历字符串,若栈顶和当前遍历到的字符,不匹配,入栈;反之,出栈

150. 逆波兰表达式求值

tip:匹配问题,栈的运用。

//讨论清楚入栈出栈的情况
//遍历字符数组,
//遇到数字,入栈
//遇到运算符,出栈两次,取出两数,进行运算,注意左右位置

239. 滑动窗口最大值

tip:滑动窗口,队列的运用。这里取巧,维护一个单调队列

//维护一个单调递减队列,窗口变化(左右边界的变化),单调队列就更新
//左窗口移动,单调队列出队:
//	若队首元素不是窗口左边界的值,就不操作;否则,删除单调队列的队首
//右窗口移动,单调队列入队:
//	若插入的新值大于队尾元素,则删除队尾元素,直到队尾不再比新值小,新值入队列

347. 前 K 个高频元素

//关键词:任意顺序,恰好可以利用优先队列(堆)解决
//先用map统计各数频率
//使用优先队列,比较器,比较的是Entry的value即频率,o1.getValue()-o2.getValue(),升序,小顶堆
//遍历map.entrySet() Set集合,放入优先队列PriorityQueue,若未遍历到k次的位置,就出队,最后队列里剩的就是前k的高频率数
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值