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

全球设计网站自己的网站怎么做跳转

全球设计网站,自己的网站怎么做跳转,找个做游戏的视频网站,成都市建设网站首页03.01、[简单] 三合一 1、题目描述 三合一。描述如何只用一个数组来实现三个栈。 你应该实现push(stackNum, value)、pop(stackNum)、isEmpty(stackNum)、peek(stackNum)方法。stackNum表示栈下标,value表示压入的值。 构造函数会传入一个stackSize参数&#xf…

03.01、[简单] 三合一

1、题目描述

三合一。描述如何只用一个数组来实现三个栈。

你应该实现push(stackNum, value)pop(stackNum)isEmpty(stackNum)peek(stackNum)方法。stackNum表示栈下标,value表示压入的值。

构造函数会传入一个stackSize参数,代表每个栈的大小。

2、方法思路

  1. 数组表示栈:我们可以使用一个数组 arr 来表示三个栈。数组被划分为三个部分,每部分存储一个栈的元素。栈 1 的索引范围是 [0, stackSize-1],栈 2 的范围是 [stackSize, 2*stackSize-1],栈 3 的范围是 [2*stackSize, 3*stackSize-1]
  2. 辅助指针数组:用一个长度为 3 的数组 tops,存储每个栈的栈顶索引(即当前元素的存储位置),通过栈的编号 stackNum 来访问对应的栈。
  3. 操作限制
    • 在进行 push 操作时,需要检查栈是否已经满了。
    • poppeek 操作在栈为空时应返回 -1。

3、代码实现

class TripleInOne {
private:vector<int> arr;  // 用来存储三个栈的数据vector<int> tops; // 栈指针, 指向三个栈的下一个可用位置int stackSize;    // 每个栈的最大容量public:// 初始化: 设置栈的大小, 初始化数组和栈顶指针TripleInOne(int stackSize) {this->stackSize = stackSize;      // 保存栈的大小arr.resize(3 * stackSize); // 数组容量是三个栈的总容量// 初始化三个栈的指针// 栈 1 从 0 开始, 栈 2 从 stackSize 开始, 栈 3 从 2*stackSize 开始tops = {0, stackSize, 2 * stackSize};}// 向指定的栈中压入一个元素void push(int stackNum, int value) {// 检查当前栈是否已满if (tops[stackNum] < (stackNum + 1) * stackSize) {arr[tops[stackNum]++] = value; // 插入值并更新栈顶索引}}// 从指定的栈中弹出栈顶元素int pop(int stackNum) {if (isEmpty(stackNum)) { // 栈为空时返回-1return -1;}return arr[--tops[stackNum]]; // 弹出栈顶元素并更新栈顶索引}// 查看指定栈的栈顶元素int peek(int stackNum) {// 检查栈是否为空if (isEmpty(stackNum)) { // 栈为空时返回-1return -1;}return arr[tops[stackNum] - 1]; // 返回栈顶元素}// 判断指定栈是否为空bool isEmpty(int stackNum) {// 如果栈指针等于栈的起始位置,说明栈为空return tops[stackNum] == stackSize * stackNum;}
};

4、代码解析

  • 构造函数 TripleInOne(int stackSize):
    • 初始化 arr 数组大小为 3 * stackSize,以容纳三个栈的数据。
    • 初始化 tops 数组,分别为三个栈的初始位置:栈 1 为 0,栈 2 为 stackSize,栈 3 为 2 * stackSize
  • push(int stackNum, int value):
    • 先检查当前栈是否已满(通过检查指针是否超出该栈的边界),若未满,则将值压入并更新指针。
  • pop(int stackNum):
    • 检查栈是否为空,若为空则返回 -1;否则更新指针并返回栈顶元素。
  • peek(int stackNum):
    • 检查栈是否为空,若为空则返回 -1;否则返回栈顶元素。
  • isEmpty(int stackNum):
    • 通过比较指针位置是否等于栈的初始位置来判断栈是否为空。

5、时间复杂度

  • pushpoppeekisEmpty 操作的时间复杂度均为 O(1),因为每次操作只需更新栈指针或访问数组中的一个元素。

这个解决方案使用了固定大小的数组来实现三个栈的分隔,逻辑简单且效率高。在面试中这是一个常见的问题,考察你对栈和数组的理解,以及如何在限制条件下实现数据结构。

http://www.yayakq.cn/news/707685/

相关文章:

  • 合肥网站空间广州网站排名优化
  • 卡纸做荷花网站美食网站建设策划书
  • 中国建设银行官方网站 认证百度图片搜索图片识别
  • 网站开发存在的风险马尼拉做网站
  • 网站标题栏php简易购物网站开发
  • 国外做的好的医疗网站设计郑州论坛官网
  • 做一个15页的网站怎么做企业网站示例
  • 公司建网站的步骤是什么网站怎么建设?
  • 陕西网站建设公司找哪家好python基础教程电子版
  • 网站没有icp备案怎么访问什么网站类型
  • 天水 网站建设公司名字大全2022
  • 南京电信网站空间扩容做国际网站有什么需要注意的
  • 吉林省建设监理协会网站诚信建设网推怎么做
  • 做网站收款支付宝接口网站建设买服务器价格
  • 做静态网站需要什么保障网装修平台
  • 卖老石器老榆木做哪个网站好建站如何注重内容建设
  • 网站注册协议今年国内重大新闻
  • 个人电台网站模版织梦怎么修改网站标题
  • 做美食网站的优势图片设计师网站
  • 做哪方面的网站微信借口的网站怎么做
  • 如何查看网站流量网站在线演示
  • 国外家谱网站的建设个人社保缴费证明在哪里下载
  • 网站设计科技有限公司网站推广怎么写
  • 苏州网站 建设 公司网站页面引导怎么做
  • 企业设计网站系统嘉兴专业做网站
  • 如何破解网站后台网站建设与管理基础及实训(php版)
  • 天津最好的网站建设徐汇网站设计
  • 淘客那些网站怎么做的高碑店网站建设价格
  • 网站备案流程阿里云网站建设优化开发公司
  • 企业网站建立网络虚拟社区时对于企业sem竞价