leetcode每日一题复盘(10.2~10.8)

news2024/9/21 4:35:09

leetcode 347 前k个高频元素 

关键词:堆排序,优先队列,小根堆

这道题真没想出来怎么做,只能想到哈希统计数目,对优先队列还不是很熟悉,后来看了详解自己重写了一遍

主要思路是用哈希统计每个元素出现次数,再利用优先队列的性质创建小根堆(优先队列默认是从大到小排序,将是一个大根堆,因此需要重写比较函数cmp)

题目要求是前k个元素,因此我们维护一个大小为k的队列,每次插入元素队列自动排序将最小的排在堆顶,当数量>k时弹出堆顶元素,继续排序直到全部元素都遍历过

最后用vector存放堆中元素即可

为什么创建小根堆是a.second>b.second?

这个与优先队列的底层代码有关,其他数据结构a.second>b.second表示的是从大到小,只需要记住优先队列是相反的就可以了

leetcode 145 二叉树的后序遍历 

二叉树的后序遍历和144的前序遍历,94的中序遍历大同小异,这里就放一起当作一个题目来讲了

递归法

优点是代码简洁易写,但是效率差点,虽然时间复杂度都是O(n)

贴一个递归算法的代码,把递归顺序改一下就可以是其他遍历了

 void traversal(TreeNode*node,vector<int>&v)
    {
        if(node==nullptr)
        {
            return;
        }
        traversal(node->left,v);
        traversal(node->right,v); 
        v.emplace_back(node->val);
    }
  vector<int> postorderTraversal(TreeNode* root) {
        vector<int>res;
        traversal(root,res);
        return res;
}

迭代法

递归是隐式地调用栈,而迭代法就是显式地调用栈,将调用栈的过程以代码呈现出来

前序遍历

也就是我们的说的根左右,因为根在前,所以我们在遍历到根的时候就可以把根处理了(结果数组中插入根的值,不着急弹出根因为后面还要从根的右子树进行遍历)

先将根入栈,然后一直其根的左子树入栈,直到左子树为空就换成在右子树遍历,右子树遍历完后将根弹出,完成一个树遍历

 vector<int> preorderTraversal(TreeNode* root) {
        vector<int>res;
        stack<TreeNode*>Nodestack;
        while(root!=nullptr||!Nodestack.empty())
        {
            while(root)
            {
                Nodestack.push(root);
                res.emplace_back(root->val);
                root=root->left;
            }
            root=Nodestack.top()->right;
            Nodestack.pop();

        }
        return res;
    }

后序遍历

后序是左右根,因此根要放到最后才处理(也就是说,根最后才加入结果数组)

先将根的左子树全部入栈,直到root为空,此时将栈顶(左边最后一个根)设为root,再遍历其右子树,如果右子树为空,则可以将根加入结果数组中了

vector<int> postorderTraversal(TreeNode* root) {
        vector<int>res;
        stack<TreeNode*>Nodestack;
        TreeNode*pre=nullptr;
        while(root!=nullptr||!Nodestack.empty())
        {
            while(root)
            {
                Nodestack.push(root);
                root=root->left;
            }
            root=Nodestack.top();
            Nodestack.pop();
            if(root->right==nullptr||root->right==pre)
            {
                res.emplace_back(root->val);
                pre=root;
                root=nullptr;
            }
            else
            {
                Nodestack.push(root);
                root=root->right;
            }

        }
        return res;
    }

当然也有一种方法,可以将前序的遍历顺序换一下再reverse结果数组,就可以将前序遍历变成后序遍历

中序遍历

中序遍历的算法和前序遍历差不多,不过是根的处理时间换了一下

先遍历完左子树,再将根处理,再遍历右子树

vector<int> inorderTraversal(TreeNode* root) {
        vector<int>res;
        stack<TreeNode*>Nodestack;
        while(root!=nullptr||!Nodestack.empty())
        {
            while(root)
            {
                Nodestack.push(root);
                root=root->left;
            }
            root=Nodestack.top();
            res.emplace_back(root->val);
            Nodestack.pop();
            root=root->right;
           
        }
        return res;
    }

统一遍历法

具体可看代码随想录 (programmercarl.com)

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

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

相关文章

Android 中级控件

目录 一、图形定制1.1 图形Drawable1.2 形状图形1.3 状态列表图形 二、选择按钮2.1 复选框2.2 开关按钮2.3 单选按钮 三、文本输入3.1 编辑框3.2 焦点变更监听器3.3 文本变化监听器 四、对话框4.1 提醒对话框4.2 日期对话框4.3 时间对话框 一、图形定制 1.1 图形Drawable ~~~~…

国庆放假作业5

1、qt实现TCP服务器和客户端 &#xff08;1&#xff09;服务器 头文件 #ifndef MAINWINDOW_H #define MAINWINDOW_H#include <QMainWindow> #include <QTcpServer> #include <QTcpSocket> #include <QList> #include <QMessageBox> #include …

新手学习Python用哪个软件比较好?

对于新手学习Python&#xff0c;有几个常用的集成开发环境&#xff08;IDE&#xff09;可以选择。以下是一些受欢迎的选择&#xff0c;可供题主参考下载使用。 集成开发环境&#xff08;IDE&#xff09; 1. PyCharm&#xff1a; PyCharm 是一款功能强大的 Python IDE&#x…

Vmware 静态网络配置

概述 仅主机模式&#xff08;VMware1&#xff09;&#xff1a;使用host-only的方式是不能和外界通信的&#xff0c;只能够和本机的物理网卡通信 桥接&#xff08;VMnet0&#xff09;&#xff1a;使用桥接的方式使得自己的虚拟机和自己的真实机网卡在同一个网段 NAT&#xff0…

穿越时空的创新:解析云原生与Web3.0的奇妙渊源

文章目录 云原生的崛起云原生的关键特点 Web3.0的崭露头角Web3.0的关键特点 云原生与Web3.0的交汇点1. 去中心化应用程序的部署2. 安全性和可信性3. 去中心化身份管理4. 数据的分布和共享 云原生与Web3.0的未来1. 云原生的区块链支持2. Web3.0的企业应用3. 数据交互的革命4. 新…

FFmpeg:打印音/视频信息(Meta信息)

多媒体文件基本概念 多媒体文件其实是个容器在容器里面有很多流(Stream/Track)每种流是由不同的编码器编码的从流中读出的数据称为包在一个包中包含着一个或多个帧 几个重要的结构体 AVFormatContextAVStreamAVPacket FFmpeg操作流数据的基本步骤 打印音/视频信息(Meta信息…

计算机考研 | 2021年 | 计算机组成原理真题

文章目录 【计算机组成原理2021年真题43题-15分】【第一步&#xff1a;信息提取】【第二步&#xff1a;具体解答】【第三步&#xff1a;总结】 【计算机组成原理2021年真题44题-8分】【第一步&#xff1a;信息提取】【第二步&#xff1a;具体解答】 【计算机组成原理2021年真题…

JavaScript实战游戏逻辑

● 在做猜游戏之前&#xff0c;我们肯定要随机生成一个数字。那就跟之前掷色子的游戏一样 const number Math.trunc(Math.random() * 20) 1; //生成一个1-20的随机数字● 之后&#xff0c;在输入正确的时候我们肯定需要在问号上面显示出来 ● 在测试阶段&#xff0c;我们可…

Java多线程同步锁、Lock锁和等待唤醒机制及代码演示

多线程入门学习路线 线程的生命周期线程的安全问题同步代码块同步方法Lock锁生产者和消费者&#xff08;等待唤醒机制&#xff09; 线程的生命周期 问&#xff1a;sleep方法会让线程睡眠&#xff0c;睡眠时间到了之后&#xff0c;立马就会执行下面的代码吗? 解&#xff1a;sl…

安装使用TinyCore Linux的一些收获

为了学习Linux Shell编程&#xff0c;决定安装一个纯粹的Linux&#xff0c;由于电脑硬件配置较低&#xff0c;选择了最轻量化Llinux操作系统版本TinyCore Linux。 一、TinyCore Linux有三个版本 打开TinyCore Linux的下载页面 http://www.tinycorelinux.net/downloads.html&a…

跨境电商测评内幕及自养号技术教学

现在测评行业的水越来越深了。几年前的测评行业都是邮箱联系老外&#xff0c;大多是一些产品的爱好者&#xff0c;评价也很真实公正。而现在&#xff0c;大量人加入&#xff0c;还有一些中介的参与&#xff0c;及骗子中介、黑心测评买家都纷纷的涌入了市场。 我们公司专业做底…

【计算机网络】高级IO初步理解

文章目录 1. 什么是IO&#xff1f;什么是高效 IO? 2. IO的五种模型五种IO模型的概念理解同步IO与异步IO整体理解 3. 阻塞IO4. 非阻塞IOsetnonblock函数为什么非阻塞IO会读取错误&#xff1f;对错误码的进一步判断检测数据没有就绪时&#xff0c;返回做一些其他事情完整代码myt…

好奇喵 | Tor浏览器——层层剥开洋葱

前言 在之前的博客中&#xff0c;Surface Web —&#xff1e; Deep Web —&#xff1e; Dark Web&#xff0c;我们解释了表层网络、深层网络等的相关概念。 本篇博客介绍Tor浏览器&#xff0c;并且把Tor浏览器的洋葱层层剥开&#xff0c;了解其历史&#xff0c;工作原理&…

c++的发展史以及如何学习

文章目录 1. 什么是C 2. C发展史 3. C的重要性 4. 如何学习C 文章内容 1. 什么是C C语言是结构化和模块化的语言&#xff0c;适合处理较小规模的程序。对于复杂的问题&#xff0c;规模较大的 程序&#xff0c;需要高度的抽象和建模时&#xff0c;C语言则不合适。为了解决软…

【AI视野·今日Robot 机器人论文速览 第四十七期】Wed, 4 Oct 2023

AI视野今日CS.Robotics 机器人学论文速览 Wed, 4 Oct 2023 Totally 40 papers &#x1f449;上期速览✈更多精彩请移步主页 Interesting: &#x1f4da;基于神经网络的多模态触觉感知, classification, position, posture, and force of the grasped object多模态形象的解耦(f…

Pikachu靶场——远程命令执行漏洞(RCE)

文章目录 1. RCE1.1 exec "ping"1.1.1 源代码分析1.1.2 漏洞防御 1.2 exec "eval"1.2.1 源代码分析1.2.2 漏洞防御 1.3 RCE 漏洞防御 1. RCE RCE(remote command/code execute)概述&#xff1a; RCE漏洞&#xff0c;可以让攻击者直接向后台服务器远程注入…

二叉树经典例题

前言&#xff1a; 本文主要讲解了关于二叉树的简单经典的例题。 因为二叉树的特性&#xff0c;所以关于二叉树的大部分题目&#xff0c;需要利用分治的思想去递归解决问题。 分治思想&#xff1a; 把大问题化简成小问题&#xff08;根节点、左子树、右子树&#xff09;&…

【C++】STL详解(十)—— 用红黑树封装map和set

​ ​&#x1f4dd;个人主页&#xff1a;Sherry的成长之路 &#x1f3e0;学习社区&#xff1a;Sherry的成长之路&#xff08;个人社区&#xff09; &#x1f4d6;专栏链接&#xff1a;C学习 &#x1f3af;长路漫漫浩浩&#xff0c;万事皆有期待 上一篇博客&#xff1a;【C】STL…

国庆中秋特辑(八)Spring Boot项目如何使用JPA

目录 一、Spring Boot 项目使用 JPA 的步骤二、Spring Boot 项目使用 JPA 注意事项三、Spring Boot 项目使用 JPA 常用语法 Spring Boot项目如何使用JPA&#xff0c;具体如下 一、Spring Boot 项目使用 JPA 的步骤 添加依赖 在项目的 pom.xml 文件中添加 Spring Boot JPA 和数…

如何使用 ChatGPT 创建强大的讲故事广告

shadow&#xff1a; 使用AI技术来辅助创作故事越来越流行&#xff0c;从事营销相关工作的人员需要不断适应和学习新的技术和工具&#xff0c;以应对行业的变化和挑战。 如何使用ChatGPT创建讲故事的广告&#xff1a; A. 确定品牌故事和信息传递B. 确定目标受众C. 开发概念D. 使…