其他分享
首页 > 其他分享> > 剑指 Offer 59 - II. 队列的最大值

剑指 Offer 59 - II. 队列的最大值

作者:互联网

剑指 Offer 59 - II. 队列的最大值

请定义一个队列并实现函数 max_value 得到队列里的最大值,要求函数max_valuepush_backpop_front均摊时间复杂度都是O(1)。

若队列为空,pop_frontmax_value 需要返回 -1

示例 1:

输入: 
["MaxQueue","push_back","push_back","max_value","pop_front","max_value"]
[[],[1],[2],[],[],[]]
输出: [null,null,null,2,1,2]

示例 2:

输入: 
["MaxQueue","pop_front","max_value"]
[[],[],[]]
输出: [null,-1,-1]

 

限制:

解析:

承接上题,用的单调队列

class MaxQueue {
public:
    int que[10010];
    int humdrum[10010];
    int i, j, x, y;
    MaxQueue() {
        i = -1;
        j = 0;
        x = 0;
        y = -1;
    }
    
    int max_value() {
        if(x > y) return -1;
        if(humdrum[j] == -1)
        {
            cout << j << "  " << i << endl;
            cout << x << "  " << y << endl;
        }
        return que[humdrum[j]];
    }
    
    void push_back(int value) {
        que[++y] = value;
        while(i >= j && que[humdrum[i]] <= value)
        {
            i--;
        }
        humdrum[++i] = y;

    }
    
    int pop_front() {
        if(x > y) return -1;
        int ret = que[x++];
        while(j <= i && humdrum[j] < x) j++;
        return ret;
    }
};

/**
 * Your MaxQueue object will be instantiated and called as such:
 * MaxQueue* obj = new MaxQueue();
 * int param_1 = obj->max_value();
 * obj->push_back(value);
 * int param_3 = obj->pop_front();
 */

 

标签:59,Offer,int,max,back,value,II,pop,front
来源: https://www.cnblogs.com/WTSRUVF/p/16525945.html