算法面试——栈与队列高频题:最小栈、滑动窗口最大值
2026/7/19 0:43:21 网站建设 项目流程

栈和队列的面试题通常不是在考数据结构本身,而是考如何用它们解决实际问题。

一、最小栈

classMinStack{privateStack<Integer>dataStack;privateStack<Integer>minStack;publicMinStack(){dataStack=newStack<>();minStack=newStack<>();}publicvoidpush(intval){dataStack.push(val);if(minStack.isEmpty()||val<=minStack.peek()){minStack.push(val);}}publicvoidpop(){if(dataStack.pop().equals(minStack.peek())){minStack.pop();}}publicinttop(){returndataStack.peek();}publicintgetMin(){returnminStack.peek();}}

二、有效的括号

publicbooleanisValid(Strings){Stack<Character>stack=newStack<>();for(charc:s.toCharArray()){if(c=='('||c=='['||c=='{'){stack.push(c);}else{if(stack.isEmpty())returnfalse;chartop=stack.pop();if(c==')'&&top!='(')returnfalse;if(c==']'&&top!='[')returnfalse;if(c=='}'&&top!='{')returnfalse;}}returnstack.isEmpty();}

三、滑动窗口最大值

publicint[]maxSlidingWindow(int[]nums,intk){if(nums.length==0)returnnewint[0];int[]result=newint[nums.length-k+1];Deque<Integer>deque=newArrayDeque<>();for(inti=0;i<nums.length;i++){while(!deque.isEmpty()&&nums[deque.peekLast()]<nums[i]){deque.pollLast();}deque.offerLast(i);if(deque.peekFirst()<=i-k){deque.pollFirst();}if(i>=k-1){result[i-k+1]=nums[deque.peekFirst()];}}returnresult;}

💡 觉得有用的话,点赞 + 关注【张老师技术栈】吧!

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询