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

对网站开发课程的建议健康成都官微最新消息

对网站开发课程的建议,健康成都官微最新消息,网站排名优化学习,怎么看网站发的外链环形数组 start 指向第一个有效元素的索引,end 指向最后一个有效元素的下一个位置索引。 注意: start是闭区间,先左移后赋值,先赋值(null)后右移;end是开区间,先赋值再右移,先左移再赋值(null…

环形数组

start 指向第一个有效元素的索引,end 指向最后一个有效元素的下一个位置索引。

注意: start是闭区间,先左移后赋值,先赋值(null)后右移;end是开区间,先赋值再右移,先左移再赋值(null)。

左移减一加size再取模,右移加一再取模。

JS代码实现:

class CycleArray {
constructor(size = 1) {this.size = size;this.arr = new Array(size);// start 指向第一个有效元素的索引,闭区间this.start = 0;// 切记 end 是一个开区间,// 即 end 指向最后一个有效元素的下一个位置索引this.end = 0;this.count = 0;
}resize(newSize) {// 创建新的数组var newArr = new Array(newSize);// 将旧数组的元素复制到新数组中for (var i = 0; i < this.count; i++) {newArr[i] = this.arr[(this.start + i) % this.size];}this.arr = newArr;// 重置 start 和 end 指针this.start = 0;this.end = this.count;this.size = newSize;
}// 在数组头部添加元素,时间复杂度 O(1)
addFirst(val) {// 当数组满时,扩容为原来的两倍if (this.isFull()) {this.resize(this.size * 2);}// 因为 start 是闭区间,所以先左移,再赋值this.start = (this.start - 1 + this.size) % this.size;this.arr[this.start] = val;this.count++;
}// 删除数组头部元素,时间复杂度 O(1)
removeFirst() {if (this.isEmpty()) {throw new Error("Array is empty");}// 因为 start 是闭区间,所以先赋值,再右移this.arr[this.start] = null;this.start = (this.start + 1) % this.size;this.count--;// 如果数组元素数量减少到原大小的四分之一,则减小数组大小为一半if (this.count > 0 && this.count == this.size / 4) {this.resize(this.size / 2);}
}// 在数组尾部添加元素,时间复杂度 O(1)
addLast(val) {if (this.isFull()) {this.resize(this.size * 2);}// 因为 end 是开区间,所以是先赋值,再右移this.arr[this.end] = val;this.end = (this.end + 1) % this.size;this.count++;
}// 删除数组尾部元素,时间复杂度 O(1)
removeLast() {if (this.isEmpty()) {throw new Error("Array is empty");}// 因为 end 是开区间,所以先左移,再赋值this.end = (this.end - 1 + this.size) % this.size;this.arr[this.end] = null;this.count--;// 缩容if (this.count > 0 && this.count == this.size / 4) {this.resize(this.size / 2);}
}// 获取数组头部元素,时间复杂度 O(1)
getFirst() {if (this.isEmpty()) {throw new Error("Array is empty");}return this.arr[this.start];
}// 获取数组尾部元素,时间复杂度 O(1)
getLast() {if (this.isEmpty()) {throw new Error("Array is empty");}// end 是开区间,指向的是下一个元素的位置,所以要减 1return this.arr[(this.end - 1 + this.size) % this.size];
}isFull() {return this.count === this.size;
}size() {return this.count;
}isEmpty() {return this.count === 0;
}
}
http://www.dtcms.com/wzjs/793132.html

相关文章:

  • 毕业设计做网站还是系统好商品展示网站模板源码
  • 内外网网站栏目建设方案长春网站建设网
  • 南宁专业做网站建网站开发语言对比
  • 北京建设行政主管部门官方网站vue下一页
  • 英网站建设做网站l价格
  • html做网站步骤wordpress分表分库插件
  • 毕业设计做网站前端电子商务公司简介模板
  • 百度站长平台快速收录怎么弄wordpress文章列表分页
  • 做模版网站需要租服务器吗门户网站开发工具
  • 河北廊坊seo网站建设网站优化网站建设对接流程图
  • 龙岩网站建设要多少费用网站空间选linux
  • 上海有名的网络公司企业seo优化方案
  • 学校网站建设企业微信凡科互动黑了咋办
  • 找做cad彩拼的网站杭州黑马程序员培训机构怎么样
  • 视频网站开发技术书wordpress 获取当前页面名称
  • 艾特软件 网站建设郑州网站建设zzwzjs
  • 做网站需要先买域名吗长沙网站设计
  • 房地产网站系统聊天室网站模板
  • 做网站的尺寸为什么我的电脑有些网站打不开
  • 有没关于做动画设计师的网站门户网站 解决方案
  • 郴州建设网站哪家好无锡百度竞价
  • 个人网站怎么设计wordpress 联动筛选
  • 国土局网站建设经验做网站用到的技术
  • 营销设计网站建设重庆网站建设外包哪家好
  • 哔哩哔哩网站怎么做视频山东东营市属于几线城市
  • 天津网站建设信息俄文淘宝网站建设
  • 成免费crm推广网站绵阳市城市建设档案馆网站
  • nike网站建设分析网站设计说明书怎么写
  • 做商业网站的服务费维护费嘉兴网站建设企业网站制作
  • 昆明网站建设公司多少钱wordpress如何备份图片