• 895. Maximum Frequency Stack


    Problem:

    Implement FreqStack, a class which simulates the operation of a stack-like data structure.

    FreqStack has two functions:

    • push(int x), which pushes an integer x onto the stack.
    • pop(), which removes and returns the most frequent element in the stack.
      • If there is a tie for most frequent element, the element closest to the top of the stack is removed and returned.

    Example 1:

    Input: 
    ["FreqStack","push","push","push","push","push","push","pop","pop","pop","pop"],
    [[],[5],[7],[5],[7],[4],[5],[],[],[],[]]
    Output: [null,null,null,null,null,null,null,5,7,5,4]
    Explanation:
    After making six .push operations, the stack is [5,7,5,7,4,5] from bottom to top.  Then:
    
    pop() -> returns 5, as 5 is the most frequent.
    The stack becomes [5,7,5,7,4].
    
    pop() -> returns 7, as 5 and 7 is the most frequent, but 7 is closest to the top.
    The stack becomes [5,7,5,4].
    
    pop() -> returns 5.
    The stack becomes [5,7,4].
    
    pop() -> returns 4.
    The stack becomes [5,7].
    

    Note:

    • Calls to FreqStack.push(int x) will be such that 0 <= x <= 10^9.
    • It is guaranteed that FreqStack.pop() won't be called if the stack has zero elements.
    • The total number of FreqStack.push calls will not exceed 10000 in a single test case.
    • The total number of FreqStack.pop calls will not exceed 10000 in a single test case.
    • The total number of FreqStack.push and FreqStack.pop calls will not exceed 150000 across all test cases.

    思路

    使用2个哈希表,一个保存频率,一个保存根据频率值确定的元素栈,即每个元素在频率为1到其最大频率的栈内均有值。

    Solution (C++):

    unordered_map<int, int> freq;
    unordered_map<int, stack<int>> stk;
    int max_freq = 0;
    FreqStack() {
        
    }
    
    void push(int x) {
        max_freq = max(max_freq, ++freq[x]);
        stk[freq[x]].push(x);
    }
    
    int pop() {
        if (max_freq == 0)  return -1;
        int x = stk[max_freq].top();
        stk[max_freq].pop();
        if (stk[freq[x]--].empty())  --max_freq;
        return x;
    }
    

    性能

    Runtime: 348 ms  Memory Usage: 72.3 MB

    思路

    Solution (C++):

    
    

    性能

    Runtime: ms  Memory Usage: MB

    相关链接如下:

    知乎:littledy

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

    作者:littledy
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利。
  • 相关阅读:
    线程安全与可重入编写方法
    新手MySQL工程师必备命令速查手册
    分布式之数据库和缓存双写一致性方案解析
    在java代码中用xslt处理xml文件
    Java并发编程之并发代码设计
    Java多线程和并发基础
    Java多线程面试大全
    springboot获取URL请求参数的多种方式
    JAVA文件转换为Base64
    Silver Cow Party
  • 原文地址:https://www.cnblogs.com/dysjtu1995/p/12749250.html
Copyright © 2020-2023  润新知