力扣1670.设计前中后队列

力扣1670.设计前中后队列

  • 两个双端队列

    • 始终保证right.size() >= left.size()
    • 向中间插入时如果一样长 就插入right
    • 如果right长就插入left
cpp 复制代码
  class FrontMiddleBackQueue {
  private:
      deque<int> left;
      deque<int> right;
      //保证left.size() + 1 >= right.size() >= left.size()
      void banlance()
      {
          if(left.size() > right.size())
          {
              right.push_front(left.back());
              left.pop_back();
          }
          else if(right.size() > left.size() + 1)
          {
              left.push_back(right.front());
              right.pop_front();
          }
      }
  public:
      
      FrontMiddleBackQueue() {
  
      }
      
      void pushFront(int val) {
          left.push_front(val);
          banlance();
      }
      
      void pushMiddle(int val) {
          if(left.size() < right.size())
              left.push_back(val);
          else
              right.push_front(val);
      }
      
      void pushBack(int val) {
          right.push_back(val);
          banlance();
      }
      
      int popFront() {
          if(right.empty())
              return -1;
          int val;
          if(left.empty())
          {
              val = right.front();
              right.pop_front();
          }
          else
          {
              val = left.front();
              left.pop_front();
          }
          banlance();
          return val;
      }
      
      int popMiddle() {
          if(right.empty())
              return -1;
          int val;
          if(left.size() == right.size())
          {
              val = left.back();
              left.pop_back();
          }
          else
          {
              val = right.front();
              right.pop_front();
          }
          return val;
      }
      
      int popBack() {
          if(right.empty())
              return -1;
          int val = right.back();
          right.pop_back();
          banlance();
          return val;
      }
  };
相关推荐
科研前沿41 分钟前
镜像孪生VS视频孪生核心技术产品核心优势
大数据·人工智能·算法·重构·空间计算
水蓝烟雨41 分钟前
1931. 用三种不同颜色为网格涂色
算法·leetcode
晨曦夜月1 小时前
map与unordered_map区别
算法·哈希算法
图码2 小时前
如何用多种方法判断字符串是否为回文?
开发语言·数据结构·c++·算法·阿里云·线性回归·数字雕刻
handler012 小时前
Linux 内核剖析:进程优先级、上下文切换与 O(1) 调度算法
linux·运维·c语言·开发语言·c++·笔记·算法
minglie12 小时前
实数列的常用递推模式
算法
代码小书生2 小时前
math,一个基础的 Python 库!
人工智能·python·算法
AI科技星2 小时前
全域数学·数术本源·高维代数卷(72分册)【乖乖数学】
人工智能·算法·数学建模·数据挖掘·量子计算
生成论实验室2 小时前
《事件关系阴阳博弈动力学:识势应势之道》第一篇:生成正在发生——从《即事经》到事件-关系网络
人工智能·科技·算法·架构·创业创新
漂流瓶jz2 小时前
UVA-1152 和为0的4个值 题解答案代码 算法竞赛入门经典第二版
数据结构·算法·二分查找·题解·aoapc·算法竞赛入门经典·uva