随笔分类 -  数据结构与算法

摘要:一、栈 栈(stack)是一种操作受限的线性表数据结构,**基于后进先出(LIFO)**策略的集合类型,例如函数中的临时变量符合后进先出的特性,因此用栈保存最合适。 在入栈和出栈过程中所需的空间复杂度是 O(1),时间复杂度也是 O(1)。空间复杂度是指运行算法还需要的额外存储空间。 注意,内存中的 阅读全文
posted @ 2022-11-01 14:44 青川薄 阅读(368) 评论(0) 推荐(0) 编辑
摘要:回溯算法(backtracking)、 什么是回溯法 回溯法也可以叫做回溯搜索法,它是一种搜索的方式。 在二叉树系列中,我们已经不止一次,提到了回溯,例如二叉树:以为使用了递归,其实还隐藏着回溯 (opens new window)。 回溯是递归的副产品,只要有递归就会有回溯。 所以以下讲解中,回溯 阅读全文
posted @ 2022-09-21 10:30 青川薄 阅读(441) 评论(0) 推荐(0) 编辑
摘要:引用数据类型有object , array ,function 一 、数组 一、创建数组 1、使用数组字面量方法 var arr1 = []; // 创建一个数组 var arr2 = [20]; // 创建一个包含1项数据为20的数组 var arr3 = ['lily','lucy','Tom' 阅读全文
posted @ 2022-09-04 22:01 青川薄 阅读(97) 评论(0) 推荐(0) 编辑
摘要:一、动态规划 动态规划(dynamic programming, DP)是一种将复杂问题分解成更小的子问题来解决的优化技术。 注意,动态规划和分而治之是不同的方法。分而治之方法是把问题分解成相互独立的子问题,然后组合它们的答案,而动态规划则是将问题分解成相互依赖的子问题。 用动态规划解决问题时,要遵 阅读全文
posted @ 2022-08-29 20:09 青川薄 阅读(183) 评论(0) 推荐(0) 编辑
摘要:function reversePairs(nums: number[]): number { let count = 0; // 如果数组中只有1个元素或者为空,则不存在逆序对 if (nums.length < 2) return count; const mergeSort = (front, 阅读全文
posted @ 2022-08-26 11:30 青川薄 阅读(38) 评论(0) 推荐(0) 编辑
摘要:二叉查找树(二叉搜索树) 在二叉查找树(Binary Search Tree,BST)中,每个结点的值都大于左子结点,小于右子结点。 ​ ​ 当中序遍历BST时,就可在 O(n) 的时间复杂度内输出有序的结点。 BST的时间复杂度和树的高度成正比,即 O(height),经过推导后,完全二叉树的高度 阅读全文
posted @ 2022-07-11 17:44 青川薄 阅读(132) 评论(0) 推荐(0) 编辑
摘要:树 树是一种非线性表数据结构,树的基本概念如下所列。 (1)结点高度:结点到叶子结点的最长路径(即边数)。例题:112. 路径总和。 (2)结点深度:根结点到这个结点所经历的边的个数。例题:104. 二叉树的最大深度。 (3)结点层数:结点深度加 1。 (4)树的高度:根结点的高度。例题:面试题 0 阅读全文
posted @ 2022-07-11 17:40 青川薄 阅读(471) 评论(0) 推荐(0) 编辑
摘要:图的概念 在计算机程序设计中,图也是一种非常常见的数据结构,图论其实是一个非常大的话题,在数学上起源于哥尼斯堡七桥问题。 什么是图? 图是一种与树有些相似的数据结构。 实际上,在数学的概念上,树是图的一种。 我们知道树可以用来模拟很多现实的数据结构,比如:家谱/公司组织架构等等。 那么图长什么样子呢 阅读全文
posted @ 2022-07-11 17:39 青川薄 阅读(87) 评论(0) 推荐(0) 编辑
摘要:位运算 位运算符 '&'(与),有0则0 '|'(或),有1则1 '^'(异或) ,相同为0,不同为1 位运算中常用 '~'(按位取反) ,有1为0,有0为1 '<<' (左移),先求该数的补码,再向左移动右边的位数,空位补0,最高位丢弃,最后将移动后的二进制数转为十进制数 '>>' (右移),先求 阅读全文
posted @ 2022-07-08 21:52 青川薄 阅读(123) 评论(0) 推荐(0) 编辑
摘要:1.什么是堆? 堆是一种特殊的完全二叉树 所有的节点都 大于等于 或 小于等于 它的子节点,最大堆的根节点大于等于它的子节点,最小堆的根节点小于等于它的子节点 JS中常用数组表示堆 完全二叉树:二叉树除开最后一层,其他层结点数都达到最大,最后一层的所有结点都集中在左边(左边结点排列满的情况下,右边才 阅读全文
posted @ 2022-06-28 16:29 青川薄 阅读(148) 评论(0) 推荐(0) 编辑
摘要:1.链表 1.1 认识链表 链表和数组 链表和数组一样,可以用于存储一系列的元素,但是链表和数组的实现机制完全不同。 数组 存储多个元素,数组(或列表)可能是最常用的数据结构。 几乎每一种编程语言都有默认实现数组结构,提供了一个便利的 [] 语法来访问数组元素。 数组缺点: 数组的创建需要申请一段连 阅读全文
posted @ 2022-06-27 14:47 青川薄 阅读(405) 评论(0) 推荐(0) 编辑
摘要:引用数据类型有object , array ,function 一 、数组 一、创建数组 1、使用数组字面量方法 var arr1 = []; // 创建一个数组 var arr2 = [20]; // 创建一个包含1项数据为20的数组 var arr3 = ['lily','lucy','Tom' 阅读全文
posted @ 2022-05-23 16:18 青川薄 阅读(334) 评论(1) 推荐(0) 编辑
摘要:什么是双指针(对撞指针、快慢指针) 双指针,指的是在遍历对象的过程中,不是普通的使用单个指针进行访问,而是使用两个相同方向(快慢指针)或者相反方向(对撞指针)的指针进行扫描,从而达到相应的目的。 换言之,双指针法充分使用了数组有序这一特征,从而在某些情况下能够简化一些运算。 用法 对撞指针(首尾指针 阅读全文
posted @ 2022-03-25 16:06 青川薄 阅读(1082) 评论(0) 推荐(1) 编辑

点击右上角即可分享
微信分享提示