题解 | #双端队列设计#

双端队列设计

https://www.nowcoder.com/practice/54ebef63058242459194a2bd1e04a908

#include <ios>
#include <vector>
class Solution {
  public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param operations int整型vector<vector<>>
     * @param k int整型
     * @return int整型vector
     */
    vector<int> performOperations(vector<vector<int> >& operations, int k) {
        // write code here
        int n = operations.size();
        vector<int> res;
        DoubleQue que(k);
        for (int i = 0; i < n; ++i) {
            switch (operations[i][0]) {
                case 1:
                    res.push_back(que.insertFront(operations[i][1]));
                    break;
                case 2:
                    res.push_back(que.insertRear(operations[i][1]));
                    break;
                case 3:
                    res.push_back(que.deleteFront());
                    break;
                case 4:
                    res.push_back(que.deleteRear());
                    break;
                case 5:
                    res.push_back(que.getFront());
                    break;
                case 6:
                    res.push_back(que.getRear());
                    break;
            }
        }
        return res;

    }


    class DoubleQue {
      private:
        vector<int> vals;
        int _capacity;
        int _size;
        int _head, _tail;
      public:
        DoubleQue(int k ): _capacity(k), _size(0), vals(vector<int>(k)), _head(0),
            _tail(0) {}

        bool isFull() const {
            return _size == _capacity;
        }

        bool isEmpty() const {
            return _size == 0;
        }

        int getFront() const {
            if (_size == 0)
                return -1;
            return vals[_head];
        }

        int getRear() const {
            if (_size == 0)
                return -1;
            return vals[(_tail-1+_capacity)%_capacity];
        }

        int deleteFront() {
            if (_size == 0)
                return -1;
            --_size;
            _head = (_head + 1) % _capacity;
            return 0;
        }

        int deleteRear() {
            if (_size == 0)
                return -1;
            --_size;
            _tail = (_tail - 1 + _capacity) % _capacity;
            return 0;
        }

        int insertFront(int value) {
            if (_capacity == _size)
                return -1;
            ++_size;
            _head = (_head - 1 + _capacity) % _capacity;
            vals[_head] = value;
            return 0;
        }

        int insertRear(int value) {
            if (_capacity == _size)
                return -1;
            ++_size;
            vals[_tail] = value;
            _tail = (_tail + 1) % _capacity;
            return 0;
        }

    };

};

全部评论

相关推荐

藏剑天涯:全要了 领4份工资
点赞 评论 收藏
分享
10-09 00:50
已编辑
长江大学 算法工程师
不期而遇的夏天:1.同学你面试评价不错,概率很大,请耐心等待;2.你的排名比较靠前,不要担心,耐心等待;3.问题不大,正在审批,不要着急签其他公司,等等我们!4.预计9月中下旬,安心过节;5.下周会有结果,请耐心等待下;6.可能国庆节前后,一有结果我马上通知你;7.预计10月中旬,再坚持一下;8.正在走流程,就这两天了;9.同学,结果我也不知道,你如果查到了也告诉我一声;10.同学你出线不明朗,建议签其他公司保底!11.同学你找了哪些公司,我也在找工作。
点赞 评论 收藏
分享
找只鸡:可以,直接拉黑这个邮箱
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务