题目:
模拟栈的活动,还要找出中位数。
解答:
1、使用一个真正的栈
2、为了模拟空栈的行为需要定义size
3、为了计算出中位数,定义了数组
中位数可以定义一个全为0的数组,出现过的数,将其当做坐标,并且记录出现的次数,则在找中位数的时候就是找中间那个数,也就是(size+1)/2的数,这是此题的巧妙之处
具体的java代码为:
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner in=new Scanner(System.in);
int n=in.nextInt();
Stack<Integer> stack=new Stack();
ArrayList list=new ArrayList();
int size=0;
int[] count=new int[5000];
for(int i=0;i<n;i++){
String command=in.next();
if(command.equals("Push")){
int num=in.nextInt();
stack.add(num);
size++;
count[num]++;
}
else if(command.equals("Pop")){
if(size==0)
list.add("Invalid");
else{
int m=stack.pop();
size--;
count[m]--;
list.add(m);
}
}
else{
if(size==0)
{
list.add("Invalid");
}
else{
int p=getMid(count,(size+1)/2);
list.add(p);
}
}
}
for(int i=0;i<list.size();i++){
System.out.println(list.get(i));
}
}
public static int getMid(int[] count,int mid){
int sum=0;
for(int i=0;i<count.length;i++){
sum+=count[i];
if(sum>=mid){
return i;
}
}
return 0;
}
}