【面试算法题】O(1)时间复杂度内求栈内最大值

题目

一个栈stack,具有push和pop操作,其时间复杂度皆为O(1)。
设计算法max操作,求栈中的最大值,该操作的时间复杂度也要求为O(1)。
可以修改栈的存储方式,push,pop的操作,但是要保证O(1)的时间复杂度,空间时间复杂度无要求。

我的实现

package qiuzhaoprepare;

import java.util.Scanner;
import java.util.Stack;
class MaxValueStack {
	static Stack<Integer> stack = new Stack<Integer>();
	static Stack<Integer> maxStack = new Stack<Integer>();
	
	public void push(int value) {
		if(maxStack.isEmpty() || value>=maxStack.peek())
			maxStack.push(value);
		else
			maxStack.push(maxStack.peek());
		stack.push(value);
	}
	
	public int pop() {
		if(!stack.isEmpty()) {
			int temp = stack.pop();
			maxStack.pop();
			return temp;
		}else
			System.out.print("Error, stack is already empty!");
		return 0;
	}
	
	public int max() {
		return maxStack.peek();
	}
}
public class MaxStack {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		int[] arr = new int[n];
		for(int i=0;i<n;i++)
			arr[i] = sc.nextInt();
		
		MaxValueStack item = new MaxValueStack();
		for(int i=0;i<n;i++)
			item.push(arr[i]);
		int res = item.max();
		
		System.out.print(res);
		sc.close();
	}
}

其他

讲解的非常好的博客:
https://blog.csdn.net/taotaotheripper/article/details/8652665
https://blog.csdn.net/sheepmu/article/details/38459165
https://blog.csdn.net/KeepThinking_/article/details/9107697

你可能感兴趣的:(java,栈,数据结构,面试,求职,面试中手撕过的那些题目)