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

【前端面试】设计循环双端队列javascript

题目

https://leetcode.cn/problems/design-circular-deque/description/
在这里插入图片描述

存储循环队列的向量空间是循环的,用通俗的话来讲,就是我们在做next或者prev操作时,不会发生溢出
取模、或者直接判断是否为0/size返回一个值。

数组实现

用函数来实现一个类,定义容量、头尾指针,和初始化数组存储

/**
 * @param {number} k
 */
var MyCircularDeque = function(k) {
    this.capacity = k + 1;
    this.rear = this.front = 0;
    this.elements = new Array(k + 1).fill(0);
};

利用原型链扩展循环队列的能力


/** 
 * @param {number} value
 * @return {boolean}
 */
MyCircularDeque.prototype.insertFront = function(value) {
    if (this.isFull()) {
        return false;
    }
    this.front = (this.front - 1 + this.capacity) % this.capacity;
    this.elements[this.front] = value;
    return true;
};

/** 
 * @param {number} value
 * @return {boolean}
 */
MyCircularDeque.prototype.insertLast = function(value) {
  if (this.isFull()) {
        return false;
    }
    this.elements[this.rear] = value;
    this.rear = (this.rear + 1) % this.capacity;
    return true;
};

/**
 * @return {boolean}
 */
MyCircularDeque.prototype.deleteFront = function() {
if (this.isEmpty()) {
        return false;
    }
    this.front = (this.front + 1) % this.capacity;
    return true;
};

/**
 * @return {boolean}
 */
MyCircularDeque.prototype.deleteLast = function() {
if (this.isEmpty()) {
        return false;
    }
    this.rear = (this.rear - 1 + this.capacity) % this.capacity;
    return true;
};

/**
 * @return {number}
 */
MyCircularDeque.prototype.getFront = function() {
    if (this.isEmpty()) {
        return -1;
    }
    return this.elements[this.front];
};

/**
 * @return {number}
 */
MyCircularDeque.prototype.getRear = function() {
if (this.isEmpty()) {
        return -1;
    }
    return this.elements[(this.rear - 1 + this.capacity) % this.capacity];
};

/**
 * @return {boolean}
 */
MyCircularDeque.prototype.isEmpty = function() {
return this.rear == this.front;
};

/**
 * @return {boolean}
 */
MyCircularDeque.prototype.isFull = function() {
 return (this.rear + 1) % this.capacity == this.front;
};

/**
 * Your MyCircularDeque object will be instantiated and called as such:
 * var obj = new MyCircularDeque(k)
 * var param_1 = obj.insertFront(value)
 * var param_2 = obj.insertLast(value)
 * var param_3 = obj.deleteFront()
 * var param_4 = obj.deleteLast()
 * var param_5 = obj.getFront()
 * var param_6 = obj.getRear()
 * var param_7 = obj.isEmpty()
 * var param_8 = obj.isFull()
 */

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

相关文章:

  • 从零开始:Gitee 仓库创建与 Git 配置指南
  • CAPL数据库操作
  • AUTOSAR从入门到精通-无人驾驶网约车(Robotaxi)
  • 【数据库】国产达梦数据库与mysql特点、区别、发展前景
  • PCL 新增自定义点类型【2025最新版】
  • 基础入门-反弹Shell渗透命令Reverse反向Bind正向利用语言文件下载多姿势
  • C#通过ACE OLEDB驱动程序访问 Access和 Excel
  • K8s 节点管理:使用 kubeadm 删除和重新添加 Kubernetes 节点
  • 软件架构设计——DCI 范型
  • uni-app支持Vue 3的组件库推荐几个
  • 创新之光闪耀,点赋科技在第十三届创新创业大赛中绽放光彩
  • Django form.save 方法的详细分析
  • 毕业设计选题系统
  • 前段框架有哪些
  • 一起学习LeetCode热题100道(65/100)
  • 数据结构基本知识
  • Rust: Web框架Axum和Rest Client协同测试
  • 从 Oracle 到 TiDB 丨数据库资源评估指南
  • CUDA与TensorRT学习一:并行处理与GPU体系架构
  • 名城优企游学活动走进龙腾半导体:CRM助力构建营销服全流程体系
  • nginx部署前段VUE项目
  • wsl2 无法上网解决方法
  • 文本文件完整性判断-加密
  • Python中排序算法之冒泡排序
  • Soul Machines——AI生成虚拟主播或虚拟人,模拟真人交互
  • 后端MVC三层架构,Mybatis ,雪花算法生成唯一id