![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构和算法
文章平均质量分 52
m0_55372289
这个作者很懒,什么都没留下…
展开
-
小鑫的算法之路:希尔排序
插入排序遍历待排序数据集合,每次将元素插入到其前面已排序数据集合的合适位置。插入排序与打麻将类似,在整理最初摸起来的13张牌过程中,不断将未整理的牌插入至已整理的牌的合适位置。插入算法的核心思路是不断地将元素插入至合适的位置。若将数据集合按照从小到大的进行排序,代码如下:template<typename T>void insertSort(std::vector<T>& data){ for (size_t i = 1; i < data.siz原创 2022-05-29 22:34:45 · 112 阅读 · 0 评论 -
小鑫的算法之路:leetcode0347 前 K 个高频元素
题目给你一个整数数组 nums 和一个整数 k ,请你返回其中出现频率前 k 高的元素。你可以按 任意顺序 返回答案。提示:1 <= nums.length <= 105k 的取值范围是 [1, 数组中不相同的元素的个数]题目数据保证答案唯一,换句话说,数组中前 k 个高频元素的集合是唯一的解法1:优先队列在题目中,需要返回出现频率前k高的元素,因此需要首先统计出元素出现的个数,此时需要遍历数组数据,并通过哈希表保存数据。然后基于优先队列保存出现频率前k高的元素,最终得出结果。代码原创 2022-05-26 00:36:04 · 109 阅读 · 0 评论 -
小鑫的算法之路:leetcode0215 数组中的第K个最大元素
题目给定整数数组 nums 和整数 k,请返回数组中第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。解法1:排序对于返回第k个最大的元素,可以对整个数组从大到小进行快速排序,然后返回索引为k - 1的元素即可。代码如下:class Solution {public: int findKthLargest(vector<int>& nums, int k) { std::sort(nums.begi原创 2022-05-12 00:50:42 · 465 阅读 · 0 评论 -
小鑫的算法之路:堆
背景队列的特点是先进先出(FIFO),在日常生活中很常见,比如说食堂中就餐的队列,基本都是谁先排队,谁就先打餐吃饭。然而,还有其他一些场景在生活中也很常见,比如说在医院排队求诊的病人,如果来了一位严重的病人,那么就需要急诊,否者如果按照普通队列排队等待。如果其他病人求诊完,那就会危及这位病人的生命,因此这位病人需要立即就医,优先级很高。就这引出了优先队列,优先队列的特点不是先进先出,而是基于优先级出队。对于优先队列,在数据结构上不能依赖普通队列进行实现,而需要基于堆实现,才能高效实现入队和基于优先级出原创 2022-05-25 00:04:17 · 103 阅读 · 0 评论 -
小鑫的算法之路:leetcode0104 二叉树的最大深度
题目给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明: 叶子节点是指没有子节点的节点。解法1:递归 DFS对于二叉树的最大深度,可通过递归进行DFS。当节点为空时,直接返回0。若节点不为空,则在左右子树的最大深度值的基础上加1即可。代码如下:class Solution {public: int maxDepth(TreeNode* root) { if (root == nullptr) { retu原创 2022-05-20 23:36:43 · 119 阅读 · 0 评论 -
小鑫的算法之路:leetcode0100 相同的树
题目给你两棵二叉树的根节点 p 和 q ,编写一个函数来检验这两棵树是否相同。如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。提示:两棵树上的节点数目都在范围 [0, 100] 内-104 <= Node.val <= 104解法1:递归,深度优先搜索两棵树如果相同,即两棵树的结构完全相同,同时节点具有相同的值。那么可以同时对两颗树采用前序遍历递归处理。代码如下:class Solution {public: bool isSameTree(Tr原创 2022-05-20 08:00:32 · 222 阅读 · 0 评论 -
小鑫的算法之路:leetcode0101 对称二叉树
题目给你一个二叉树的根节点 root , 检查它是否轴对称。提示:树中节点数目在范围 [1, 1000] 内-100 <= Node.val <= 100**进阶:**你可以运用递归和迭代两种方法解决这个问题吗?解法1:递归如果一颗二叉树沿着根节点轴对称,那么只需沿着根节点判断左右孩子节点是否轴对称即可。注意在递归函数中,代码如下:class Solution {public: bool isSymmetric(TreeNode* root) {原创 2022-05-18 23:51:25 · 63 阅读 · 0 评论 -
小鑫的算法之路:leetcode0102 二叉树的层序遍历
题目给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。解法1:迭代层序遍历又为广度优先遍历。对于二叉树的层序遍历,在每一层从左到右按照先后顺序将节点保存至辅助队列中。由于在返回的结果需要集中逐层的显示结果,那么在访问队列元素前,需要先获取到当前队列中节点的个数,然后只处理对应个数的同一层数的节点,并且将节点的孩子节点继续加入至队列中。代码如下:class Solution {public: vector<vector<int&g原创 2022-05-18 23:09:34 · 57 阅读 · 0 评论 -
小鑫的算法之路:leetcode0145 二叉树的后序遍历
题目给你一棵二叉树的根节点 root ,返回其节点值的 后序遍历 。提示:树中节点的数目在范围 [0, 100] 内-100 <= Node.val <= 100解法1:递归二叉树具有天然的递归结构,后序遍历是在访问完节点的左右子树后才对数据进行操作。代码如下:class Solution {public: vector<int> postorderTraversal(TreeNode* root) { vector<int>原创 2022-05-18 00:41:36 · 55 阅读 · 0 评论 -
小鑫的算法之路:leetcode0144 二叉树的前序遍历
题目给你二叉树的根节点 root ,返回它节点值的 前序 遍历。提示:树中节点数目在范围 [0, 100] 内-100 <= Node.val <= 100解法1:递归二叉树具有天然的递归结构,前序遍历是在访问节点左右子树前对数据进行操作。代码如下:class Solution {public: vector<int> preorderTraversal(TreeNode* root) { vector<int> result{原创 2022-05-17 23:45:26 · 128 阅读 · 0 评论 -
小鑫的算法之路:leetcode0094 二叉树的中序遍历
题目给定一个二叉树的根节点 root ,返回 它的 中序 遍历 。提示:树中节点数目在范围 [0, 100] 内-100 <= Node.val <= 100解法1:递归二叉树具有天然的递归结构,中序遍历是在访问完节点的左子树后且访问右子树前对数据进行操作。代码如下:class Solution {public: vector<int> inorderTraversal(TreeNode* root) { vector<int>原创 2022-05-17 00:47:15 · 67 阅读 · 0 评论 -
小鑫的算法之路:leetcode0875 爱吃香蕉的珂珂
题目珂珂喜欢吃香蕉。这里有 n 堆香蕉,第 i 堆中有 piles[i] 根香蕉。警卫已经离开了,将在 h 小时后回来。珂珂可以决定她吃香蕉的速度 k (单位:根/小时)。每个小时,她将会选择一堆香蕉,从中吃掉 k 根。如果这堆香蕉少于 k 根,她将吃掉这堆的所有香蕉,然后这一小时内不会再吃更多的香蕉。珂珂喜欢慢慢吃,但仍然想在警卫回来前吃掉所有的香蕉。返回她可以在 h 小时内吃掉所有香蕉的最小速度 k(k 为整数)。解法1:二分查找由于珂珂喜欢慢慢吃,那么她吃香蕉的速度应该是越小越好,在n堆香原创 2022-05-15 22:18:51 · 94 阅读 · 0 评论