zoukankan      html  css  js  c++  java
  • 1381. Design a Stack With Increment Operation

    Problem:

    Design a stack which supports the following operations.

    Implement the CustomStack class:

    • CustomStack(int maxSize) Initializes the object with maxSize which is the maximum number of elements in the stack or do nothing if the stack reached the maxSize.
    • void push(int x) Adds x to the top of the stack if the stack hasn't reached the maxSize.
    • int pop() Pops and returns the top of stack or -1 if the stack is empty.
    • void inc(int k, int val) Increments the bottom k elements of the stack by val. If there are less than k elements in the stack, just increment all the elements in the stack.

    Example 1:

    Input
    ["CustomStack","push","push","pop","push","push","push","increment","increment","pop","pop","pop","pop"]
    [[3],[1],[2],[],[2],[3],[4],[5,100],[2,100],[],[],[],[]]
    Output
    [null,null,null,2,null,null,null,null,null,103,202,201,-1]
    Explanation
    CustomStack customStack = new CustomStack(3); // Stack is Empty []
    customStack.push(1);                          // stack becomes [1]
    customStack.push(2);                          // stack becomes [1, 2]
    customStack.pop();                            // return 2 --> Return top of the stack 2, stack becomes [1]
    customStack.push(2);                          // stack becomes [1, 2]
    customStack.push(3);                          // stack becomes [1, 2, 3]
    customStack.push(4);                          // stack still [1, 2, 3], Don't add another elements as size is 4
    customStack.increment(5, 100);                // stack becomes [101, 102, 103]
    customStack.increment(2, 100);                // stack becomes [201, 202, 103]
    customStack.pop();                            // return 103 --> Return top of the stack 103, stack becomes [201, 202]
    customStack.pop();                            // return 202 --> Return top of the stack 102, stack becomes [201]
    customStack.pop();                            // return 201 --> Return top of the stack 101, stack becomes []
    customStack.pop();                            // return -1 --> Stack is empty return -1.
    

    Constraints:

    • 1 <= maxSize <= 1000
    • 1 <= x <= 1000
    • 1 <= k <= 1000
    • 0 <= val <= 100
    • At most 1000 calls will be made to each method of increment, push and pop each separately.

    思路

    利用数组模拟栈。

    Solution (C++):

    vector<int> stk;
    int size;
    CustomStack(int maxSize) {
        size = maxSize;
    }
    
    void push(int x) {
        if (stk.size() == size)  return;
        stk.push_back(x);
    }
    
    int pop() {
        if (stk.empty())  return -1;
        int res = stk.back();
        stk.pop_back();
        return res;
    }
    
    void increment(int k, int val) {
        int n = min(k, (int)stk.size());
        for (int i = 0; i < n; ++i) {
            stk[i] += val;
        }
    }
    

    性能

    Runtime: 64 ms  Memory Usage: 18.2 MB

    思路

    Solution (C++):

    
    

    性能

    Runtime: ms  Memory Usage: MB

    相关链接如下:

    知乎:littledy

    欢迎关注个人微信公众号:小邓杂谈,扫描下方二维码即可

    作者:littledy
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利。
  • 相关阅读:
    获取当前具有输入焦点控件的窗口句柄
    C++日志
    IsWindowVisible
    fedora20 播放aiv视频
    nginx 伪静态大于10个参数 $10
    fedora 安装nginx+php+mysql
    限制图片目录有文件的执行权限
    jQuery制作go to top按钮
    centos 6.5 安装阿里云的一键安装包(nginx+php5.4+mysql5.1)
    centos 6.5网卡dhcp不能获得网关
  • 原文地址:https://www.cnblogs.com/dysjtu1995/p/12748011.html
Copyright © 2011-2022 走看看