刷题训练之队列与宽搜

news2024/9/28 3:21:20

> 作者:დ旧言~
> 座右铭:松树千年终是朽,槿花一日自为荣。

> 目标:熟练掌握字符串算法。

> 毒鸡汤:学习,学习,再学习 ! 学,然后知不足。

> 专栏选自:刷题训练营

> 望小伙伴们点赞👍收藏✨加关注哟💕💕 

🌟前言分析

最早博主续写了牛客网130道题,这块的刷题是让同学们快速进入C语言,而我们学习c++已经有一段时间了,知识储备已经足够了但缺少了实战,面对这块短板博主续写刷题训练,针对性学习,把相似的题目归类,系统的刷题,而我们刷题的官网可以参考:​​​​​​

力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台

牛客网 - 找工作神器|笔试题库|面试经验|实习招聘内推,求职就业一站解决_牛客网

⭐知识讲解

基本思想: 

  • 采用BFS算法
  • 采用模拟细想

🌙topic-->1

题目链接:1. - 力扣(LeetCode)

 

题目分析:

给定一个 N 叉树,返回其节点值的层序遍历。(即从左到右,逐层遍历)

算法原理:

  • 解法:BFS

图解:

代码演示:

class Solution {
public:
    vector<vector<int>> levelOrder(Node* root) {
        vector<vector<int>> ret; // 记录最终结果
        queue<Node*> q;          // 层序遍历需要的队列
        if (root == nullptr)
            return ret;
        q.push(root);
        while (q.size()) {
            int sz = q.size(); // 先求出本层元素的个数
            vector<int> tmp;   // 统计本层的节点
            for (int i = 0; i < sz; i++) {
                Node* t = q.front();
                q.pop();
                tmp.push_back(t->val);
                for (Node* child : t->children) // 让下⼀层结点⼊队
                {
                    if (child != nullptr)
                        q.push(child);
                }
            }
            ret.push_back(tmp);
        }
        return ret;
    }
};

🌙topic-->2

题目链接:2. - 力扣(LeetCode)

 

题目分析:

给你二叉树的根节点 root ,返回其节点值的 锯齿形层序遍历 。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。

算法原理:

  • 解法:层序遍历

图解:

代码演示:

class Solution {
public:
    vector<vector<int>> zigzagLevelOrder(TreeNode* root) {
        vector<vector<int>> ret;
        if (root == nullptr)
            return ret;
        queue<TreeNode*> q;
        q.push(root);
        int level = 1;
        while (q.size()) {
            int sz = q.size();
            vector<int> tmp;
            for (int i = 0; i < sz; i++) {
                auto t = q.front();
                q.pop();
                tmp.push_back(t->val);
                if (t->left)
                    q.push(t->left);
                if (t->right)
                    q.push(t->right);
            }
            // 判断是否逆序
            if (level % 2 == 0)
                reverse(tmp.begin(), tmp.end());
            ret.push_back(tmp);
            level++;
        }
        return ret;
    }
};

🌙topic-->3

题目链接:3. - 力扣(LeetCode)

 

题目分析:

给你一棵二叉树的根节点 root ,返回树的 最大宽度 。(树的 最大宽度 是所有层中最大的 宽度 )

算法原理:

  • 解法:利用数组存储二叉树的方式,给结点编号

图解:

代码演示:

class Solution {
public:
    int widthOfBinaryTree(TreeNode* root) {
        vector<pair<TreeNode*, unsigned int>> q; // ⽤数组模拟队列
        q.push_back({root, 1});
        unsigned int ret = 0;
        while (q.size()) {
            // 先更新这⼀层的宽度
            auto& [x1, y1] = q[0];
            auto& [x2, y2] = q.back();
            ret = max(ret, y2 - y1 + 1);
            // 让下⼀层进队
            vector<pair<TreeNode*, unsigned int>> tmp; // 让下⼀层进⼊这个队列
            for (auto& [x, y] : q) {
                if (x->left)
                    tmp.push_back({x->left, y * 2});
                if (x->right)
                    tmp.push_back({x->right, y * 2 + 1});
            }
            q = tmp;
        }
        return ret;
    }
};

🌙topic-->4

题目链接:4. - 力扣(LeetCode)

 

题目分析:

给定一棵二叉树的根节点 root ,请找出该二叉树中每一层的最大值。

算法原理:

  • 解法:利用层序遍历,统计出每一层的最大值

图解:

这个题目和上面的极其相似,所以就不再讲解了

代码演示:

class Solution {
public:
    vector<int> largestValues(TreeNode* root) {
        vector<int> ret;
        if (root == nullptr)
            return ret;
        queue<TreeNode*> q;
        q.push(root);
        while (q.size()) {
            int sz = q.size();
            int tmp = INT_MIN;
            for (int i = 0; i < sz; i++) {
                auto t = q.front();
                q.pop();
                tmp = max(tmp, t->val);
                if (t->left)
                    q.push(t->left);
                if (t->right)
                    q.push(t->right);
            }
            ret.push_back(tmp);
        }
        return ret;
    }
};

🌟结束语

       今天内容就到这里啦,时间过得很快,大家沉下心来好好学习,会有一定的收获的,大家多多坚持,嘻嘻,成功路上注定孤独,因为坚持的人不多。那请大家举起自己的小手给博主一键三连,有你们的支持是我最大的动力💞💞💞,回见。

​​​

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

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

相关文章

【PyTorch实战·1】多模态图片生成(文心一言大模型)

&#x1f308; 个人主页&#xff1a;十二月的猫-CSDN博客 &#x1f525; 系列专栏&#xff1a;PyTorch实战_十二月的猫的博客-CSDN博客 &#x1f4aa;&#x1f3fb; 十二月的寒冬阻挡不了春天的脚步&#xff0c;十二点的黑夜遮蔽不住黎明的曙光 &#x1f3c0; 专栏持续更新中~…

信安 实验1 用Wireshark分析典型TCP/IP体系中的协议

实验1 用Wireshark分析典型TCP/IP体系中的协议 实验目的 通过Wireshark软件分析典型网络协议数据包&#xff0c;理解典型协议格式和存在的问题&#xff0c;为后续学习和相关实验打下基础。 实验内容 &#xff08;1&#xff09;安装Wireshark&#xff0c;熟悉功能菜单。 &…

「空间智能」跨越维度壁垒 - 构筑AI驱动的XR元宇宙

引言 在AI和XR技术快速融合的背景下&#xff0c;一场由「空间智能」&#xff08;Spatial Intelligence&#xff09;引领的革命正在悄然展开&#xff0c;为元宇宙的发展注入新的动力。这场革命的核心推动者之一&#xff0c;是由"AI教母"李飞飞领导的World Labs。Wor…

Diffusers Image Outpaint - AI一键扩图工具 本地整合包下载

Diffusers Image Outpaint 是一个基于扩散模型的图像外延技术&#xff0c;它能够根据已有的图像内容&#xff0c;生成图像的额外部分。 它通过先进的机器学习算法&#xff0c;使得图像生成更加自然和逼真&#xff0c;为用户提供了一种创新的图像处理方式。该工具基于Realvist V…

【linux-Day5】Linux权限

【linux-Day5】Linux权限 linux用户用户分类su&#xff1a;用户之间进行切换exit/ctrld&#xff1a;退出当前账户/回退到上一个登录账户 权限和文件sudo&#xff1a;暂时提高用户对指令操作的权限Linux权限身份目标文件属性文件的权限表示修改文件的权限chmod&#xff1a;设置文…

高级自动化测试常见面试题(Web、App、接口)

一、Web自动化测试 1.Selenium中hidden或者是display &#xff1d; none的元素是否可以定位到&#xff1f; 不能,可以写JavaScript将标签中的hidden先改为0&#xff0c;再定位元素 2.Selenium中如何保证操作元素的成功率&#xff1f;也就是说如何保证我点击的元素一定是可以…

黄子恒的传奇故事

从社会小白到传奇人物&#xff0c;需要经过怎样的历练过程&#xff1f;每一份成功与辉煌都并非偶然&#xff0c;只有经过千百次的锤炼&#xff0c;才能如钢铁般更硬更强。我们的主人公——黄子恒&#xff0c;正是通过不断奋斗逆袭&#xff0c;蜕变成如今的演讲家&#xff0c;用…

Arduino中读取陀螺仪MPU6050六轴数据——三个加速度、三个角速度

1、工程创建 创建和添加I2C、MPU6050的.CPP、.h文件。 &#xff08;1&#xff09;功能和测试 &#xff08;2&#xff09;主程序代码 #include "MsTimer2.h" #include "KalmanFilter.h" #include "I2Cdev.h" #include "MPU6050.h" //…

kubernetes K8S 结合 Istio 实现流量治理

目录 1.Istio介绍&#xff1f; 1.1 Istio是什么&#xff1f; 1.2 Istio流量管理 1.2.1 熔断 1.2.2 超时 1.2.3 重试 2.Istio架构 3.istio组件详解 3.1 Pilot 3.2 Envoy 3.3 Citadel 3.4 Galley 3.5 Ingressgateway 3.5 egressgateway 扩展、k8s1.23及1.23以下版…

双卫星终端首发!遨游通讯织密天地一体应急通信网

2024年9月&#xff0c;全球通信行业的目光再次聚焦于北京&#xff0c;2024年中国国际信息通信展览会如期而至。展会次日&#xff0c;遨游通讯展台前热闹非凡&#xff0c;观众们纷纷驻足体验&#xff0c;对5G防爆手机、防爆车载台、PDT多模终端、DMR多模终端、卫星通信终端、单北…

【CAS框架自定义登录异常提示-固定时间内限制登录失败次数提醒】

CAS框架自定义登录异常提示 CAS框架自定义登录异常提示cas自定义异常自定义异常的步骤-三步走1定义自定义异常类2配置文件配置3逻辑代码中抛出自定义异常总结 自定义异常显示失败问题查找 自定义异常带msg参数不显示问题处理最后 CAS框架自定义登录异常提示 本地CAS框架异常提…

MySQL数据库进阶知识(四)《视图、存储过程、触发器》

学习目标&#xff1a; 掌握数据库视图基础知识 掌握数据库存储过程原理 掌握数据库触发器相关知识 学习内容&#xff1a; 一. 视图 介绍 视图&#xff08;View&#xff09;是一种虚拟存在的表。视图中的数据并不在数据库中实际存在&#xff0c;行和列数据来自定义视图的查询…

Acwing 最小生成树

最小生成树 最小生成树:由n个节点&#xff0c;和n-1条边构成的无向图被称为G的一棵生成树&#xff0c;在G的所有生成树中&#xff0c;边的权值之和最小的生成树&#xff0c;被称为G的最小生成树。&#xff08;换句话说就是用最小的代价把n个点都连起来&#xff09; Prim 算法…

大疆会搞微单相机吗,直接和索尼、佳能、尼康竞争?

网传信息&#xff0c;不知道大疆后续是否真会考虑这块的业务。 在消费类电子的cmos领域&#xff0c;类似豪威、格科、斯特威等国产公司&#xff0c;已经有了一些突破。不过在高端的单反、微单领域&#xff0c;日本还是处于绝对的垄断地位。 2023年&#xff0c;全球cmos市场占有…

操作系统复习3 malloc如何分配内存

malloc分配内存 malloc是c语言的库函数&#xff0c;不支持重载 malloc的返回值是void*类型需要强制转换 malloc申请完的内存需要用free来进行释放内存 malloc申请空间失败会返回值为空 malloc申请的是虚拟内存地址&#xff0c;只有这块内存被访问时&#xff0c;才能发生映…

基于quill2.0的富文本编辑器,Fluent Editor,支持表格,图片,表情等

官网&#xff1a;Fluent Editor | 基于 Quill 2.0 的富文本编辑器 安装 npm i opentiny/fluent-editor quill 使用案例 <template><div class"publish-form-container"><!-- TODO --><div ref"quillEditorRef" class"quill…

comfyui 工作流生成图片使用history接口获取返回时 outputs为空 问题请教,希望有大佬可以帮忙解答一下

comfyui github地址&#xff1a; GitHub - comfyanonymous/ComfyUI: The most powerful and modular diffusion model GUI, api and backend with a graph/nodes interface.The most powerful and modular diffusion model GUI, api and backend with a graph/nodes interface.…

flush cache line dirty bytes

结论&#xff1a; ARM :To mark these lines, each line of the cache has an associated dirty bit (or bits) 所以这个依赖硬件实现&#xff0c;可能只刷出dirty bytes of cache line to memory.有的硬件只有一个dirty bit&#xff0c;所以会刷出整条cache line x86没有找…

1--苍穹外卖-SpringBoot项目介绍及环境搭建 详解

目录 软件开发整体流程 软件开发流程 角色分工 软件环境 苍穹外卖项目介绍 项目介绍 产品原型 技术选型 开发环境搭建 前端环境搭建 后端环境搭建 完善登录功能 导入接口文档 Swagger 介绍 使用方式 常用注解 软件开发整体流程 软件开发流程 需求分析&#x…

Supabase 入门指南

Supabase 是一个开源替代品&#xff0c;用于 Firebase 提供的后端服务。它基于 PostgreSQL&#xff0c;提供实时数据库、身份验证、存储等功能。本文将深入探讨 Supabase 的主要功能&#xff0c;并结合不同场景给出代码实例。 1. 创建 Supabase 项目 首先&#xff0c;访问 S…