【每日刷题】Day89

news2024/9/17 7:15:44

【每日刷题】Day89

🥕个人主页:开敲🍉

🔥所属专栏:每日刷题🍍

🌼文章目录🌼

1. 102. 二叉树的层序遍历 - 力扣(LeetCode)

2. 155. 最小栈 - 力扣(LeetCode)

3. 栈的压入、弹出序列_牛客题霸_牛客网 (nowcoder.com)

1. 102. 二叉树的层序遍历 - 力扣(LeetCode)

//思路:队列。

//层序遍历,使用一个队列存储节点指针,每一次从队头获取元素,判断当前指针指向节点的左结点和右节点是否为空,存储左右节点,将队头元素删除。

//特别地,这里我们使用一个变量来记录当前层的节点个数,根据上一层所有父节点带出的子节点个数就能判断当前层的节点个数,知道节点个数后我们创建vector<int>变量存储当前层所有节点地值。

//当前层遍历结束后,我们将当前层地vector<int>尾插入vector<vector<int>>中。

class Solution {

public:

    vector<vector<int>> levelOrder(TreeNode* root)

    {

        vector<vector<int>> ans;

        int tiersize = 0;

        queue<TreeNode*> q;

//判断树是否存在

        if(root)

        {

            q.push(root);

            tiersize++;

        }

       

//根据队列是否为空判断树是否遍历完

        while(!q.empty())

        {

//v用于存储每一层节点的val

            vector<int> v;

//tiersize为当前层节点个数

            while(tiersize--)

            {

                TreeNode* tmp = q.front();

//将当前节点val插入v

                v.push_back(tmp->val);

//弹出队头元素

                q.pop();

//存储队头元素的左右子节点

                if(tmp->left)

                    q.push(tmp->left);

                if(tmp->right)

                    q.push(tmp->right);

            }

//当前层遍历完毕,将v尾插入ans

            ans.push_back(v);

            tiersize = q.size();

        }

        return ans;

    }

};

2. 155. 最小栈 - 力扣(LeetCode)

//思路:两个栈模拟实现,st1和st2。

//st1用于存储数据,st2用于存储栈中的最小元素,保证最小的元素始终在st2的栈顶。

class MinStack {

public:

    MinStack()

    {}

   

    void push(int val)

    {

//st1啥也不用想,直接插入数据

        st1.push(val);

//st2插入数据两种情况:

① st2为空

② 当前val ≤ st2栈顶元素

        if(st2.empty()||val<=st2.top())

            st2.push(val);

    }

   

    void pop()

    {

//如果st2栈顶元素和st1栈顶元素相同,则st2也要删除,保证st2中的栈顶元素始终是st1中的最小值

        if(st2.top()==st1.top())

            st2.pop();

//st1直接删除元素

        st1.pop();

    }

   

    int top()

    {

        return st1.top();

    }

   

    int getMin()

    {

        return st2.top();

    }

    private:

    stack<int> st1;

    stack<int> st2;

};

3. 栈的压入、弹出序列_牛客题霸_牛客网 (nowcoder.com)

//思路:模拟。

//我们利用一个栈s1来模拟是否可能出现popV的出栈情况。

//使用迭代器it1和it2分别遍历pushV和popV,如果它们当前元素不同,则将pushV的当前元素插入s1,it1++;如果pushV和popV相同,则将it1和it2都++,不需要将元素插入s1中。

//特别地,如果pushV和popV当前元素不同,也需要判断一下popV当前元素是否和s1栈顶元素相同,这个情况模拟的是栈在弹出一个元素后又弹出一个元素或多个元素。

//最后结果判断标准为:

//如果it2没有走到末尾,则依次从s1栈顶拿取元素后弹出栈顶元素,同时遍历pushV,如果s1的栈顶元素和pushV的元素不同,则返回false。

//最后返回栈s1是否为空

class Solution {

public:

    bool IsPopOrder(vector<int>& pushV, vector<int>& popV)

    {

        stack<int> s1;

        vector<int>::iterator it1 = pushV.begin();

        vector<int>::iterator it2 = popV.begin();

        while(it1!=pushV.end())

        {

//如果*it1和*it2不同,则将*it1入s1,it1++

            if(*it1!=*it2)

            {

                s1.push(*it1);

                it1++;

            }

            else

             {

//否则,模拟出栈过程

                while(*it1==*it2&&it1!=pushV.end())

                {

                    it1++;

                    it2++;

                }

                while(!s1.empty()&&*it2==s1.top())

                {

                    s1.pop();

                    it2++;

                }

             }

        }

        while(!s1.empty()&&it2!=popV.end())

        {

//拿取栈顶元素与popV剩余元素依次比较

            if(*it2==s1.top())

                s1.pop();

            it2++;

        }

        return s1.empty();

    }

};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1957682.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Open3D 计算点云质心

目录 一、概述 1.1原理 1.2实现步骤 二、代码实现 2.1关键函数 2.2完整代码 三、实现效果 Open3D点云算法汇总及实战案例汇总的目录地址&#xff1a; Open3D点云算法与点云深度学习案例汇总&#xff08;长期更新&#xff09;-CSDN博客 一、概述 1.1原理 在Open3D中&am…

成为git砖家(8): 使用 git log 查询范围内的 commit

文章目录 1. 查询 git log 的文档2. 不带任何参数: git log 啥意思&#xff1f;3. git log 最主要功能是什么&#xff1f;4. git log <commit1>..<commit2> 什么意思5. 查看最近n次commit6. References 1. 查询 git log 的文档 git help log --web市面上针对 git …

从善如流之您最亲近人之善,肯出力之象-下学而上达

您最亲近人之善&#xff0c;肯出力之象&#xff0c;就是那个爬&#xff0c;甚至于跪倒在地上&#xff0c;抹那个下水井子。这或许就是那个马云大佬讲过的&#xff0c;就是从您最近距离&#xff0c;身边的人学习。人家为啥做的好&#xff0c;出色&#xff1f;而且您是一母同胞之…

太坑了!RabbitMQ+PHP开发的辛酸经历

博主介绍&#xff1a;全网粉丝10w、CSDN合伙人、华为云特邀云享专家&#xff0c;阿里云专家博主、星级博主&#xff0c;51cto明日之星&#xff0c;热爱技术和分享、专注于Java技术领域 &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅…

设计模式:模板方法模式:封装不变,扩展可变

目录 一、模板方法模式的定义与结构 二、模板方法模式的优点 三、模板方法模式的示例 示例一&#xff1a; 示例二&#xff1a; 四、总结 在软件开发中&#xff0c;设计模式是解决常见问题的可复用方案。其中&#xff0c;模板方法模式是一种行为型设计模式&#xff0c;它在不…

lora微调Qwen模型全流程

LoRA 微调 Qwen 模型的技术原理概述 LoRA&#xff08;Low-Rank Adaptation&#xff09;是一种用于大模型高效微调的方法。通过对模型参数进行低秩分解和特定层的微调&#xff0c;LoRA 能在保持模型性能的前提下显著减少训练所需的参数量和计算资源。接下来是对 LoRA 微调 Qwen…

Matlab编程资源库(9)数据插值与曲线拟合

一、一维数据插值 在MATLAB中&#xff0c;实现这些插值的函数是interp1&#xff0c;其调用格式为&#xff1a; Y1interp1(X,Y,X1,method) 函数根据X,Y的值&#xff0c;计算函数在X1处的值。X,Y是两个等长的已知向量&#xff0c;分别描述采样点和样本值&#xff0c;X1是一个向量…

【机器学习基础】初探机器学习

【作者主页】Francek Chen 【专栏介绍】⌈Python机器学习⌋ 机器学习是一门人工智能的分支学科&#xff0c;通过算法和模型让计算机从数据中学习&#xff0c;进行模型训练和优化&#xff0c;做出预测、分类和决策支持。Python成为机器学习的首选语言&#xff0c;依赖于强大的开…

vue项目引入live2d保姆级教程--web端、多种方法

一、自建live2d运行 1、选择SDK——live2d Cubism SDK &#xff08;1&#xff09;链接&#xff1a;Live2D Cubism SDK | Live2D Cubism 打开网站&#xff0c;它长这样&#xff1a; &#xff08;2&#xff09;选择web &#xff0c;到下个页面 &#xff08;3&#xff09;下…

Power Tower

Problem - D - Codeforces 牛客和codeforce都有 递归处理l,r&#xff0c;终点是lr && mod1 用扩展欧拉定理 // Problem: D. Power Tower // Contest: Codeforces - Codeforces Round 454 (Div. 1, based on Technocup 2018 Elimination Round 4) // URL: https://c…

Linux基础操作指令

Linux的操作特点&#xff1a;纯命令行&#xff08;虽然也有图形化界面&#xff0c;但主要是工程师使用&#xff0c;意义不大&#xff09; windows的操作特点&#xff1a;图形化界面&#xff08;也有纯命令行的形式&#xff0c;但其更贴近大众&#xff0c;命令行学习成本高&…

用Python打造精彩动画与视频1.2 安装Python和基本配置

1.2 安装Python和基本配置 在本章节中&#xff0c;我们将介绍如何在不同操作系统上安装Python&#xff0c;并进行基本配置&#xff0c;以便你能够顺利开始使用Python进行编程和多媒体创作。 1.2.1 Python的安装 Python有多个版本&#xff0c;目前主要使用Python 3版本。以下…

贪心加暴力枚举

数据范围只有 1 0 5 10^5 105所以我们可以直接暴力枚举&#xff0c;然后我们知道假操作一定是在最开始进行&#xff0c;至于加多少次我们可以直接枚举 class Solution { public:int minOperations(int k) {// 只可能先加后叠加if (k 1) return 0;int ans 0x7ffffff;int now…

Windows FreeCAD 导入ODA File Converter 插件

0. 背景 需要打开.dwg 格式的文件&#xff0c;AutoCAD 又要收费&#xff0c;所以使用法国的 FreeCAD&#xff0c; 安装完成打开.dwg 格式的文件时&#xff0c;出现问题如图所示&#xff1a; 1.下载插件 插件 ODA File Converter 网址 windows 插件在最下面&#xff1a; 2…

Android 性能优化(二):LeakCanary【用于分析代码是否存在内存泄漏】程序无响应

目录 1&#xff09;内存相关的五种常见问题 2&#xff09;内存溢出和内存泄漏 3&#xff09;LeakCanary是什么? 4&#xff09;LeakCanary如何使用&#xff0c;如何分析&#xff1f; 5&#xff09;LeakCanary监测的内容 提问&#xff1a;程序有时候很卡&#xff0c;经常会出现…

再论pg归档日志的设置

用过ORACLE的朋友&#xff0c;第一次设置 PG的归档参数&#xff0c;如下&#xff1a; 。。。 wal_level replica archive_mode on archive_command test ! -f /mnt/server/archivedir/%f && cp %p /mnt/server/archivedir/%f 。。。 对于归档&#xff0c;还要用…

ConvGRU原理与开源代码

ConvGRU 1. 算法简介与应用场景2. 算法原理2.1 GRU基础2.2 ConvGRU原理2.2.1 ConvGRU的结构2.2.2 卷积操作的优点 2.3 GRU与ConvGRU的对比分析2.4 ConvGRU的应用 3. PyTorch代码 仅需要网络源码的可以直接跳到末尾即可 需要ConvLSTM的可以参考我的另外一篇博客&#xff1a;小白…

Halcon Blob分析

斑点分析的思路&#xff1a;在图像中&#xff0c;相关对象的像素可以通过其灰度值来识别。例如下图的组织颗粒。这些颗粒是凉的&#xff0c;而液体是暗的&#xff0c;通过选择明亮像素(阈值)&#xff0c;可以很容易地检测到颗粒。在需要应用中&#xff0c;这种简单的暗像素和亮…

成像光学:LCD的工作原理与结构图解

一、主流显示面板技术&#xff1a;LCD&#xff0c;OLED&#xff0c;MicroLED 二、主流显示屏的发展趋势 三、LCD堆叠结构&#xff08;以比较流行的TFT-LCD为例&#xff09; 沿光路方向介绍&#xff1a;背光&#xff0c;下偏光片&#xff08;polarizer&#xff09;&#xff0c;…

python实现图像分割算法2

python实现随机步行算法 随机步行算法数学模型Python 实现详细解释优缺点应用领域随机步行算法是一种常用于图像分割和图像分析的算法。它通过模拟随机游走来确定图像中每个像素的标签或类别。随机步行算法特别适合用于解决有种子标记的图像分割问题,其中用户提供一些初始标记…