zoukankan      html  css  js  c++  java
  • Coursera Algorithms week2 栈和队列 练习测验: Stack with max

    题目原文:

    Stack with max. Create a data structure that efficiently supports the stack operations (push and pop) and also a return-the-maximum operation. Assume the elements are reals numbers so that you can compare them.

    分析:

    该题目要求在实现正常stack的push和pop操作外,还需要实现返回maximum的操作,显然一个数组是不够的,需要额外的数组maximums[]来从小到大存储stack内的值,每次返回maximum就返回maximums[n-1],可满足要求。

     1 import java.util.Arrays;
     2 
     3 /**
     4  * @author evasean www.cnblogs.com/evasean/
     5  */
     6 public class StackWithMax {
     7     public double[] items;// 为了方便展示结果,我也懒得写遍历方法,就设为public
     8     public double[] maximums; // 存放最大值的数组,为了方便展示结果,我也懒得写遍历方法,就设为public
     9     private int n;
    10     private int cap;
    11 
    12     public StackWithMax() {
    13         n = 0;
    14         cap = 2;
    15         items = new double[cap];
    16         maximums = new double[cap];
    17     }
    18 
    19     public boolean isEmpty() {
    20         return n == 0;
    21     }
    22 
    23     public void push(double item) {
    24         if (n == 0)
    25             maximums[0] = item;
    26         else {
    27             int i;
    28             int j;
    29             for (i = n - 1; i >= 0; i--) {// 这个循环用来找出item在maximums数组中应该放置的位置
    30                 if (item <= maximums[i])
    31                     continue;
    32                 else
    33                     break;
    34             }
    35             for (j = n - 1; j > i; j--) {// 将位置i以后的元素都往后挪一个位置
    36                 maximums[j + 1] = maximums[j];
    37             } // 循环结束时j指向i
    38             maximums[j + 1] = item;// j+1就是item应该放置的位置
    39         }
    40         items[n++] = item;
    41         if (n == cap)
    42             resize(2 * cap);
    43     }
    44 
    45     public double pop() {
    46         double item = items[--n];
    47         if (n > 0 && n == cap / 4)
    48             resize(cap / 2);
    49         return item;
    50     }
    51 
    52     public double maximum() {
    53         return maximums[n - 1];
    54     }
    55 
    56     private void resize(int cap) {
    57         double[] t1 = new double[cap];
    58         double[] t2 = new double[cap];
    59         for (int i = 0; i < n; i++) {
    60             t1[i] = items[i];
    61             t2[i] = maximums[i];
    62         }
    63         items = t1;
    64         maximums = t2;
    65         this.cap = cap;
    66     }
    67 
    68     public static void main(String[] args) {
    69         StackWithMax stack = new StackWithMax();
    70         stack.push(9);
    71         stack.push(8);
    72         stack.push(11);
    73         stack.push(0);
    74         stack.push(-9.9);
    75         stack.push(88);
    76         System.out.println(Arrays.toString(stack.items));
    77         System.out.println(Arrays.toString(stack.maximums));
    78         stack.pop();
    79         System.out.println(stack.maximum());
    80     }
    81 }
  • 相关阅读:
    侧方停车 成功50% 一把进不去 出去二把进
    在Windows上使用 Python 安装+ win10启用长路径
    无锡 苏州 上海 古镇 汇总20200129
    win10家庭版升级 到win10企业版
    WPS Office 2019 v11.8.2.8053地方企业版 2016 v10.8.2.6948
    WPS2019党政机关单位版(无广告困扰)
    自用Chrome插件推荐【附教程及下载】
    转载 https://www.cnblogs.com/bobo-pcb/p/11708459.html
    HDU1302_Snail【模拟题】【水题】
    how to add Javascript and CSS in page layout with sharepoint 2013
  • 原文地址:https://www.cnblogs.com/evasean/p/7230112.html
Copyright © 2011-2022 走看看