剑指offer刷题记录

2023-05-16

# 面试题9:用两个栈实现队列
用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。

算法思想:一个队列用两个栈进行操作,队列是先进先出,栈是后进先出、先进后出型数据机构。
1,push操作: 元素进入stack1以前,需要把stack2中的元素依次push回stack1,才运行stack1 push新元素进来. pop操作: 先从栈1依次弹出到stack2,然后弹出栈2顶部的元素。整个过程就是一个队列的先进先出
2,但是在交换元素的时候需要判断两个栈的元素情况:
“进队列时”,队列中是不是还有元素,若有,说明栈2中的元素不为空,此时就先将栈2的元素倒回到栈1 中,保持在“进队列状态”。
“出队列时”,将栈1的元素全部弹到栈2中,保持在“出队列状态”。
所以要做的判断是,进时,栈2是否为空,不为空,则栈2元素倒回到栈1,出时,将栈1元素全部弹到栈2中,直到栈1为空。

class Solution
{
public:
    void push(int node) {
        while (!stack2.empty()){
            stack1.push(stack2.top());
            stack2.pop();
        }
        stack1.push(node);
    }

    int pop() {
        if (stack2.empty()){
            while (! stack1.empty()){
                stack2.push(stack1.top());
                stack1.pop();
            }
        }
        if (stack2.empty())
            return -1;
        int head = stack2.top();
        stack2.pop();

        return head;
    }

private:
    stack<int> stack1;
    stack<int> stack2;
};

面试题10: 斐波那契数列

大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项。n<=39
算法思路:典型的递归算法,但是递归算法本质是在调用栈,因存在大量重复计算容易导致内存溢出 。换一种思想,为了防止大量重复计算,那就把之前的结果保存下来。
算法1:使用迭代法,用fibMin1和fibMin2保存计算过程中的结果,并复用起来。

class Solution {
public:
    int Fibonacci(int n) {
    if (n == 0) return 0;
       else if (n == 1) return 1;

       int fibMin2 = 1, fibMin1 = 0, fibN = 0;
       for (unsigned int i = 2; i <= n; ++i){
           fibN = fibMin1 + fibMin2;
           fibMin1 = fibMin2;
           fibMin2 = fibN;
       }

       return fibN;
    }
};

算法2:

class Solution {
public:
    int Fibonacci(int n) {
    if (n == 0) return 0;
       else if (n == 1) return 1;

       int fibMin2 = 1, fibMin1 = 0;
       while(--n){
           fibMin2 += fibMin1;
           fibMin1 = fibMin2 - fibMin1;
       }
       return fibMin2;
    }
};

还有其他算法思路,比如动态规划、矩阵幂。笔者知识有限,暂不论述。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

剑指offer刷题记录 的相关文章

随机推荐

  • hadoop 读取数据

    MapReduce 读取数据 通过InputFormat 决定读取的数据的类型 xff0c 然后拆分成一个个InputSplit xff0c 每个inputSplit 对应一个Map 处理 xff0c RecordReader 读取Inpu
  • 使用RDP、XDCMP连接ubuntu server,并安装vscode调试C++代码

    主要有两种连接方式 xff0c 一种用Windows自带的rdp协议 xff0c 另外一种用xdmcp协议 xff0c 下面说的是将不带界面的ubuntu server安装上界面 xff0c 并且使用windows远程界面连接 1 使用wi
  • K8s集群中flannel组件处于CrashLoopBackOff状态的一种解决办法

    1 查看自己环境中是否有多个网卡 xff0c 如果有的话需要将不属于本机常用网卡删除掉 xff0c 然后再初始化 xff0c 看一下是否能跟成功启动
  • javascript for循环的几种写法

    记录一下平时常用的for循环的方法 1 for 96 96 96 let list 61 1 2 3 4 5 for let index 61 0 index lt list length index 43 43 console log i
  • 设计模式-创建型

    设计模式类型 1 创建型设计模式 xff1a 主要解决对象的创建问题 xff0c 封装复杂的创建过程 xff0c 解耦对象的创建和使用 2 创建型包括 xff1a 单例模式 简单工厂模式 抽象工厂模式 原型模式 构造者模式 原理与实现 单例
  • Linux中 安装一些实用小软件总结

    sudo apt span class hljs built in get span install virtualbox span class hljs comment 华主席推荐 2007年年度最佳软件 xff0c 最佳编辑选择奖得主
  • 利用手机的无线显示功能投影到我的电脑(配合windows10)

    第一步 xff0c 打开windows10通知栏下方的投影按钮 第二步 xff0c 选择连接到无线显示器 第三步 xff0c 投影到这台电脑 第四步 xff0c 进行初始化设置 第五步 xff0c 打开手机的无线显示开关 第六步 xff0c
  • Openstack 发行版本列表

    Wallaby Series Release Notes Victoria Series Release Notes Ussuri Series Release Notes Train Series Release Notes Stein
  • webpack5.x 遇到的问题

    更新问题1 异常 xff1a Compiling RuleSet failed Exclamation mark separated loader lists has been removed in favor of the 39 use
  • Proxifier使用代理ip教程

    一 安装Proxifier软件在电脑上 二 打开Proxifier软件 点击配置稳文件 代理服务器 代理提取连接 xff1a https v duoip cn customer signup sale 61 xujinyang1991 例如
  • 百度携手飞腾推出区块链一体机,加速区块链技术落地应用

    日前 xff0c 百度携手飞腾推出了区块链一体机联合解决方案 xff0c 该方案由百度超级链提供底层技术支持 xff0c 飞腾FT 2000 4 腾锐D2000 腾云S2500提供核心算力支撑 xff0c 将帮助用户大幅度提升区块链网络性能
  • 关于ubuntu下HDF5库的安装和问题(HDF5 library version mismatched error)

    HDF5安装 ubuntu 16 10 64位 1 打开官网https support hdfgroup org HDF5 选择Download HDF5 选择所有平台 Source Code all platforms 选择 gzip这个
  • sklearn聚类之—KMeans

    sklearn聚类之 KMeans 未标记的数据的Clustering 聚类 xff0c 可以是使用模块sklearn cluster来实现 每个clustering algorithm xff08 聚类算法 xff09 有两个变体 xff
  • vagrant的虚机莫名其妙上不去了&vagrant虚拟机链接外网

    来吧 说个场景 xff01 上班开工 打开虚拟机 xff08 vagrant 然后连上我虚机上的数据库 xff01 Navicat连上 网络异常 上不去 昨天我还好好的 什么情况 先试试 xff1a systemctl status fir
  • 深度学习常用的Data Set数据集和CNN Model总结

    常用公共数据集 数据库 FaceDataset常用的人脸数据库 http blog csdn net chenriwei2 article details 50631212 肤色检测 amp 人脸检测数据集等链接大集合 xff08 持续更新
  • Ubuntu Linux中使用快捷键截图

    在WIN中 xff0c 习惯了用QQ的CTRL ALT A来截取指定区域的截屏了 xff0c 确实方便好用 xff0c 不过在UBUNTU中 xff0c 可以使用gnome screenshot 来完成类似的功能 当然 xff0c 截屏编辑
  • ubuntu14.04 + dlib19.2+【 C++ 】+Face Landmark Detection

    1 安装dlib dlib官网这里好像只有最新的dlib版本包 xff0c 下载选项在左下角有个蓝色的按钮 xff0c 写着download 博主用的还是目前最新的版本19 2 xff0c 因为最新的dlib版本添加了一些新的人脸检测器 x
  • Ubuntu如何测试安装包是否安装成功

    举个例子 xff0c 比如 xff1a 测试python的dlib库是否安装成功 在终端下输入 xff1a span class hljs keyword python span 出现了python版本信息 xff0c 说明已安装pytho
  • Ubuntu下有关显存的命令

    查看NVIDIA实时显存指令 在跑深度学习的时候 xff0c 经常出现显存不足的情况 xff0c 所以我们希望能够随时查看GPU时使用率 如果你是NVIDIA的GPU xff0c 那么在命令行下 xff0c 只需要一行命令就可以实现 1 显
  • 剑指offer刷题记录

    xff03 面试题 xff19 xff1a 用两个栈实现队列 用两个栈来实现一个队列 xff0c 完成队列的Push和Pop操作 队列中的元素为int类型 算法思想 xff1a 一个队列用两个栈进行操作 xff0c 队列是先进先出 xff0