
数据结构与算法
文章平均质量分 97
神洛华
这个作者很懒,什么都没留下…
展开
-
LeetCode练习九:树(下)——优先队列、堆排序
为了代码的简洁,我们建堆时,将下标为0的位置空出来不用,根节点从1开始。给定整数数组 nums 和整数 k,请返回数组中第 k 个最大的元素,你必须设计并实现时间复杂度为 O(n) 的算法解决此问题。将数组转化为大顶堆,重复从大顶堆中取出数值最大的节点,并让剩余的堆结构继续维持大顶堆性质。:把移走了最大值元素以后的剩余元素组成的序列再构造为一个新的堆积(前面讲的新key下沉)。我们可以使用优先队列(大顶堆)来存储长度为k的窗口内的数组,这样堆顶元素一定是滑动窗口内的最大值。我们只能看到滑动窗口内的。原创 2023-04-08 08:26:48 · 862 阅读 · 0 评论 -
LeetCode练习九:树(上)——树的定义及遍历、二叉搜索树
树(Tree):由n≥0n \ge 0n≥0个节点与节点之间的边组成的有限集合。当n0n = 0n0时称为空树,当n0n > 0n0时称为非空树。其中一个节点被设定为根;每个节点n(除根节点),都恰连接一条来自节点p的边,p是n的父节点;每个节点从根开始的路径是唯一的。如果每个节点最多有两个子节点,这样的树称为“二叉树”之所以把这种数据结构称为「树」是因为这种数据结构看起来就像是一棵倒挂的树,也就是说数据结构中的「树」是根朝上,而叶朝下的。如下图所示。节点Node。原创 2023-04-05 16:13:58 · 1064 阅读 · 0 评论 -
LeetCode练习七:动态规划上:线性动态规划
文章目录一、 动态规划基础知识1.1 动态规划简介1.2 动态规划的特征1.2.1 最优子结构性质1.2.2 重叠子问题性质1.2.3 无后效性1.3 动态规划的基本思路1.4 动态规划基础应用1.4.1 斐波那契数1.4.2 爬楼梯1.4.3 不同路径1.5 个人总结二、记忆化搜索2.1 记忆化搜索简介2.2 记忆化搜索与递推的区别2.3 记忆化搜索的应用2.3.1 目标和2.3.2 第 N 个泰波那契数三、线性动态规划简介3.1 单串线性 DP 问题3.1.1 最长递增子序列3.1.2 最大子数组和3原创 2023-04-01 20:05:08 · 1421 阅读 · 0 评论 -
LeetCode练习八:动态规划下:背包问题
文章目录一、背包问题简介二、 0-1 背包问题2.1 二维dp解法2.1.1 第一行表示第一个物品2.1.2 第一行表示0个物品2.2 一维dp解法2.2.1 使用两个一维数组2.2.2 使用一个一维数组2.3 0-1背包应用2.3.1 分割等和子集(最大背包价值)2.3.1.1 二维dp数组2.3.1.2 一维dp数组2.3.2 目标和(装满背包的方式)2.3.2.1 记忆化搜索2.3.2.2 二维dp数组2.3.2.3 一维数组2.3.3 最后一块石头的重量 II (最大背包价值)2.3.3.1 二原创 2023-03-28 16:40:58 · 1597 阅读 · 0 评论 -
LeetCode练习六:字符串
字符串的表示:字符串是由0个或多个字符组成的有序字符序列,由一对单引号或一对双引号表示由1对单引号或双引号表示,仅表示单行字符串;由1对三单引号或三双引号表示,可表示多行字符串;字符串是字符的有序序列,可以对其中的字符进行索引。特殊字符:使用转义符\b表示回退;\n表换行(光标移动到下行首;\r表示回车(光标移动到本行首),\t表示制表符(4格)Brute Force 算法:简称为 BF 算法。中文意思是暴力匹配算法,也可以叫做朴素匹配算法。BF 算法思想:对于给定文本串T与模式串p。原创 2023-03-20 08:17:47 · 1206 阅读 · 0 评论 -
LeetCode练习五:哈希表
哈希表(Hash Table):也叫做散列表。是根据关键码值(Key Value)直接进行访问的数据结构。哈希表通过「键key」和「映射函数Hash(key)」计算出对应的「值value」,把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做「哈希函数(散列函数)」,存放记录的数组叫做「哈希表(散列表)」。哈希表的关键思想是使用哈希函数,将键key映射到对应表的某个区块中。向哈希表中插入一个关键码值:哈希函数决定该关键字的对应值应该存放到表中的哪个区块,并将对应值存放到该区块中。原创 2023-03-12 15:35:06 · 872 阅读 · 0 评论 -
LeetCode练习四:栈
堆栈(Stack):简称为栈。一种线性表数据结构,是一种只允许在表的一端进行插入和删除操作的线性表。我们把栈中允许插入和删除的一端称为「栈顶(top)」;另一端则称为「栈底(bottom)」。当表中没有任何数据元素时,称之为「空栈」。「插入操作」和「删除操作」。栈的插入操作又称为「入栈」或者「进栈」。栈的删除操作又称为「出栈」或者「退栈」。简单来说,栈是一种「后进先出(Last In First Out)」的线性表,简称为「LIFO 结构」。「线性表」原创 2023-03-01 00:05:43 · 724 阅读 · 0 评论 -
LeetCode练习三:链表
链表基础知识和常见算法题解析原创 2023-02-24 23:42:37 · 997 阅读 · 0 评论 -
leetcode练习二:排序
冒泡排序()基本思想:通过相邻元素之间的比较与交换,使值较小的元素逐步从后面移到前面,值较大的元素从前面移到后面。这个过程就像水底的气泡一样向上冒,这也是冒泡排序法名字的由来。动画演示:1.1.4 冒泡排序优化 优化1: 某一趟遍历如果没有数据交换,则说明已经排好序了,因此不用再进行迭代了。用一个标记记录这个状态即可。 优化2: 记录某次遍历时最后发生数据交换的位置,这个位置之后的数据显然已经有序,不用再排序了。因此通过记录最后发生数据交换的位置就可以确定下次循环的范围了。1.2 选择排原创 2023-02-13 02:24:33 · 947 阅读 · 0 评论 -
leetcode练习一:数组(二分查找、双指针、滑动窗口)
1.数组1.1 二分查找力扣题目:704 二分查找35.搜索插入位置(opens new window)34.在排序数组中查找元素的第一个和最后一个位置(opens new window)69.x 的平方根367.有效的完全平方数1.2 双指针法27 移除元素26.删除排序数组中的重复项283.移动零844.比较含退格的字符串977.有序数组的平方209.长度最小的子数组904.水果成篮(opens new window)76.最小覆盖子串...原创 2023-02-12 20:34:48 · 1294 阅读 · 1 评论