2024年Java最全《剑指offer》之栈的压入、弹出序列,干货分享

总结

大型分布式系统犹如一个生命,系统中各个服务犹如骨骼,其中的数据犹如血液,而Kafka犹如经络,串联整个系统。这份Kafka源码笔记通过大量的设计图展示、代码分析、示例分享,把Kafka的实现脉络展示在读者面前,帮助读者更好地研读Kafka代码。

麻烦帮忙转发一下这篇文章+关注我

就这一次!拼多多内部架构师培训Kafka源码笔记(现已绝版)

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

我们关于栈的题目,这两天做的还是挺多的,无非就是压栈出栈。

题目

=================================================================

输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)

分析

=================================================================

输入两个数组,第一个是入栈的顺序,第二个是出栈的顺序,判断第二个数组出栈的顺序是否正确。

比如入栈:1,2,3,4,5

那出栈:5,4,3,2,1 可以

4,5,3,2,1也可以。

4,5,3,1,2就不行。

所以我们遍历第二个数组,找到在第一个数组找中的位置,这样在这之前的都先入栈,然后出栈。最后栈内容为空则表示,出栈的顺序是可以的,否则就不行。

具体例子说明,比较清楚。

比如list1:{1,2,3,4,5}

list2:{4,5,3,2,1}

先遍历数组list2

第一个为4,找到在list1 中的位置为3记录下来,将前面的数字都入栈。这时栈中的数据为1->2->3->4

然后出栈4,此时栈的数据为1->2->3。

第二个为5,找到在list1 中为4大于3 ,位置为4记录下来,所以将list1 中的3+1 到4的数据压入栈中,即将5压入栈,此时栈的数据为:1->2->3->5

然后出栈5,此时栈的数据为1->2->3

第三个为3,此时在list1 中的位置为2小于4,等于3,直接出栈。此时栈的数据为1->2

第四个为2,此时在list1 中的位置为1小于4,等于2,直接出栈。此时栈的数据为1

第四个为1,此时在list1 中的位置为0小于4,等于1,直接出栈。此时栈的数据为空

所以说明list2 是一种出栈方式。

解法

=================================================================

public boolean IsPopOrder(int [] pushA,int [] popA) {

Stack stack=new Stack<>();

if(pushAnull||popAnull||popA.length0||pushA.length0){

return false;

}

int temp=-1;

for(int i=0;i<popA.length;i++){

int j=0;

//找到i 在list1 中的位置。

while(j<popA.length &&pushA[j]!=popA[i]){

j++;

}

//如果找不到,则返回false

if(j==popA.length){

return false;

}

while(temp<j){

temp++;

stack.push(pushA[temp]);

最后

现在其实从大厂招聘需求可见,在招聘要求上有高并发经验优先,包括很多朋友之前都是做传统行业或者外包项目,一直在小公司,技术搞的比较简单,没有怎么搞过分布式系统,但是现在互联网公司一般都是做分布式系统。

所以说,如果你想进大厂,想脱离传统行业,这些技术知识都是你必备的,下面自己手打了一份Java并发体系思维导图,希望对你有所帮助。

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

记+最新讲解视频+实战项目源码】](https://bbs.youkuaiyun.com/topics/618154847)收录**

需要这份系统化的资料的朋友,可以点击这里获取

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值