PAT-Stack (30)

来源:互联网 发布:销售团队励志视频知乎 编辑:程序博客网 时间:2024/06/06 19:47

题目:

模拟栈的活动,还要找出中位数。

解答:

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;    }}


0 0
原创粉丝点击