1.1括号匹配
public boolean isValid(String s) {
//有效括号时隔4个月后重新打卡 看看栈学的怎么样
Stack stack=new Stack<>();
for(int i=0;i<s.length();i++){
char ch=s.charAt(i);
if(ch==‘(’||ch==‘{’||ch==‘[’){
stack.push(ch);
}else{
if(stack.empty()){
//右括号多
return false;
}else{
char ch1=stack.peek();
if(ch1==‘{’&&ch==‘}’||ch1==‘[’&&ch==‘]’||ch1==‘(’&&ch==‘)’){
stack.pop();
}else{
return false;
}
}
}
}
if(!stack.empty()){
return false;
}
return true;
}
1.2后缀表达式
a+b 这是我们最常见的表达式
前缀表达式就是+ab
后缀表达式就是ab+
转换方式就是每一个表达式用括号括起,将两个表达式中间的运算符放到括号外,加括号的顺序就是先乘除后加减
逆波兰表达式求值:这里是后缀表达式,所以减法就是后出的减先出的,除法也是。利用栈的特性来实现后缀表达式
public int evalRPN(String[] tokens) {
Stack stack=new Stack<>();
int num1=0;
int num2=0;
for(String str:tokens){
if(str.equals(“+”)){
num1=stack.pop();
num2=stack.pop();
stack.push(num1+num2);
}else if(str.equals(“-”)){
num1=stack.pop();
num2=stack.pop();
stack.push(num2-num1);
}else if(str.equals(“*”)){
num1=stack.pop();
num2=stack.pop();
stack.push(num1*num2);
}else if(str.equals(“/”)){
num1=stack.pop();
num2=stack.pop();
stack.push(num2/num1);
}else{
stack.push(Integer.parseInt(str));
}
}
return stack.pop();
}
1.3用栈实现队列
用栈模拟出队列的push(),pop(),peek(),empty() 方法
class MyQueue {
public Stack stack1;
public Stack stack2;
/** Initialize your data structure here. */
public MyQueue() {
stack1 =new Stack<>();
stack2 =new Stack<>();
}
/** Push element x to the back of queue. */
public void push(int x) {
stack1.push(x);
}
/** Removes the element from in front of queue and returns that element. */
public int pop() {
if(stack2.empty()){
while(!stack1.empty()){
stack2.push(stack1.pop());
}
}
return stack2.pop();
}
/** Get the front element. */
public int peek() {
if(stack2.empty()){
while(!stack1.empty()){
stack2.push(stack1.pop());
}
}
return stack2.peek();
}
/** Returns whether the queue is empty. */
public boolean empty() {
return stack1.empty()&&stack2.empty();
}
}
/**
-
Your MyQueue object will be instantiated and called as such:
-
MyQueue obj = new MyQueue();
-
obj.push(x);
-
int param_2 = obj.pop();
-
int param_3 = obj.peek();
-
boolean param_4 = obj.empty();
*/
1.4最小栈
class MinStack {
//定义双栈来实现最小栈
public Deque stack1;
public Deque minStack;
/** initialize your data structure here. */
public MinStack() {
stack1=new LinkedList();
minStack=new LinkedList();
minStack.push(Integer.MAX_VALUE);
}
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)
最后
在面试前我整理归纳了一些面试学习资料,文中结合我的朋友同学面试美团滴滴这类大厂的资料及案例
由于篇幅限制,文档的详解资料太全面,细节内容太多,所以只把部分知识点截图出来粗略的介绍,每个小节点里面都有更细化的内容!
大家看完有什么不懂的可以在下方留言讨论也可以关注。
觉得文章对你有帮助的话记得关注我点个赞支持一下!
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
存中…(img-MqymHz7S-1713714073029)]
[外链图片转存中…(img-lxPWuzvr-1713714073029)]
由于篇幅限制,文档的详解资料太全面,细节内容太多,所以只把部分知识点截图出来粗略的介绍,每个小节点里面都有更细化的内容!
大家看完有什么不懂的可以在下方留言讨论也可以关注。
觉得文章对你有帮助的话记得关注我点个赞支持一下!
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!