当前位置: 首页 > article >正文

leetcdoe 1670.设计前中后队列

1.题目要求:
在这里插入图片描述
2.题目实列:

输入:
["FrontMiddleBackQueue", "pushFront", "pushBack", "pushMiddle", "pushMiddle", "popFront", "popMiddle", "popMiddle", "popBack", "popFront"]
[[], [1], [2], [3], [4], [], [], [], [], []]
输出:
[null, null, null, null, null, 1, 3, 4, 2, -1]

解释:
FrontMiddleBackQueue q = new FrontMiddleBackQueue();
q.pushFront(1);   // [1]
q.pushBack(2);    // [1, 2]
q.pushMiddle(3);  // [1, 3, 2]
q.pushMiddle(4);  // [1, 4, 3, 2]
q.popFront();     // 返回 1 -> [4, 3, 2]
q.popMiddle();    // 返回 3 -> [4, 2]
q.popMiddle();    // 返回 4 -> [2]
q.popBack();      // 返回 2 -> []
q.popFront();     // 返回 -1 -> [] (队列为空)
 

提示:

1 <= val <= 109
最多调用 1000 次 pushFront, pushMiddle, pushBack, popFront, popMiddle 和 popBack 。

3.做题思想:
c++采用deque容器作为基础更容易, 根据题目要求要理解中间的下标的位置
4.题目代码:

class FrontMiddleBackQueue {
public:
    deque<int> array;
    FrontMiddleBackQueue() {
        array.clear();
    }
    //前方插入值
    void pushFront(int val) {
        array.push_front(val);
    }
    //中间插入值
    void pushMiddle(int val) {
        if(array.size() == 0){
            array.push_back(val);
        }else{
            int index = (0 + (array.size() - 1)) / 2;
            if(array.size() % 2 == 0){
                array.insert(array.begin() + index + 1,val);
            }else{
                array.insert(array.begin() + index,val);
            }
        }
    }
    //后方插入值
    void pushBack(int val) {
        array.push_back(val);
    }
    //前出
    int popFront() {
        if(array.size() != 0){
        int front_element = array.front();
        array.pop_front();
        return front_element;
        }else{
            return -1;
        }
    }
    //中间出值
    int popMiddle(){
        if(array.size() != 0){
        int index = (0 + array.size() - 1) / 2;
        int mid_element = array[index];
        array.erase(array.begin() + index);
        return mid_element; 
        }else{
            return -1;
        }
    }
    //后方出值
    int popBack() {
        if(array.size() != 0){ 
            int back_element = array.back();
            array.pop_back();
            return back_element;
        }else{
            return -1;
        }
    }
};

/**
 * Your FrontMiddleBackQueue object will be instantiated and called as such:
 * FrontMiddleBackQueue* obj = new FrontMiddleBackQueue();
 * obj->pushFront(val);
 * obj->pushMiddle(val);
 * obj->pushBack(val);
 * int param_4 = obj->popFront();
 * int param_5 = obj->popMiddle();
 * int param_6 = obj->popBack();
 */

http://www.kler.cn/a/457133.html

相关文章:

  • 从0到机器视觉工程师(一):机器视觉工业相机总结
  • HTML5 开关(Toggle Switch)详细讲解
  • uniapp 微信小程序开发使用高德地图、腾讯地图
  • [python SQLAlchemy数据库操作入门]-15.联合查询,跨表获取股票数据
  • 期末算法分析程序填空题
  • 【数据结构】链表(1):单向链表和单向循环链表
  • opencv与pyqt6结合例子
  • 用VBA自动更正错误的注释引用序号
  • python圣诞节简单寻宝小游戏
  • Unity功能模块一对话系统(2)打字机淡入效果
  • 喜报 | 擎创科技入围上海市优秀信创解决方案
  • Rancher V2.9.0 Docker安装教程
  • 神经网络入门实战:(二十二)只训练 (多层网络的) 指定层 / (单层网络的) 指定参数
  • 青少年编程与数学 02-005 移动Web编程基础 06课题、响应式设计
  • Web 漏洞之 CSRF 漏洞挖掘:攻防深度剖析
  • SelectionArea 实现富文本
  • 【源码 导入教程 文档 讲解】基于springboot校园新闻管理系统源码和论文
  • 【13】MySQL如何选择合适的索引?
  • 【GlobalMapper精品教程】091:根据指定字段融合图斑(字段值相同融合到一起)
  • C++学习指南
  • 初识MySQL · 库的操作
  • linux内核系列---网络
  • Java圣诞树
  • 数据结构:二叉树部分接口(链式)
  • 力扣算法--求两数之和等于目标数
  • MySQL的TIMESTAMP类型字段非空和默认值属性的影响