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

 

//C语言
typedef struct {
    int front;
    int back;
    int maxFront;
    int maxBack;
    int max[10001];
    int queue[10001];
} MaxQueue;


MaxQueue* maxQueueCreate() {
    MaxQueue* obj = (MaxQueue*)calloc(sizeof(MaxQueue),1);
    return obj;
}

int maxQueueMax_value(MaxQueue* obj) {
    return (obj->maxFront != obj->maxBack)?obj->max[obj->maxFront] :-1;
}

void maxQueuePush_back(MaxQueue* obj, int value) {
    while(obj->maxFront != obj->maxBack && obj->max[obj->maxBack-1] < value){
        obj->maxBack--;
    }
    obj->max[obj->maxBack++]=value;
    obj->queue[obj->back++]=value;
}

int maxQueuePop_front(MaxQueue* obj) {
    if(obj->front != obj->back){
        if(obj->queue[obj->front] == obj->max[obj->maxFront])
            obj->maxFront++;
        return obj->queue[obj->front++];
    }
    return -1;
}

void maxQueueFree(MaxQueue* obj) {
    free(obj);
}

/**
 * Your MaxQueue struct will be instantiated and called as such:
 * MaxQueue* obj = maxQueueCreate();
 * int param_1 = maxQueueMax_value(obj);
 
 * maxQueuePush_back(obj, value);
 
 * int param_3 = maxQueuePop_front(obj);
 
 * maxQueueFree(obj);
*/

 

posted @ 2020-12-02 19:09  温暖了寂寞  阅读(67)  评论(0编辑  收藏  举报