随笔分类 - 数据结构
摘要:快排的基本思想: 1.从待排序区间选择一个数,作为基准值(pivot); 2.切分(Partition): 遍历整个待排序区间,将比基准值小的(可以包含相等的)放到基准值的左边,将比基准值大的(可以包含相等的)放到基准值的右边; 3.采用分治思想,对基准值左右两个小区间按照同样的方式处理,直到小区间
阅读全文
摘要:回溯法:也可以叫做回溯搜索法,它是一种搜索的方式。在二叉树系列中,已经不止一次,提到了回溯,回溯是递归的副产品,只要有递归就会有回溯。 回溯法的效率:回溯的本质是穷举,穷举所有可能,然后选出我们想要的答案,如果想让回溯法高效一些,可以加一些剪枝的操作,但也改不了回溯法就是穷举的本质。 回溯法,一般可
阅读全文
摘要:01背包理论基础 有n件物品和一个最多能背重量为w 的背包。第i件物品的重量是weight[i],得到的价值是value[i] 。每件物品只能用一次,求解将哪些物品装入背包里物品价值总和最大。 二维数组: (1)确定dp数组以及下标的含义 对于背包问题,有一种写法, 是使用二维数组,即dp[i][j
阅读全文
摘要:对于动态规划问题,我将拆解为如下五步曲,这五步都搞清楚了,才能说把动态规划真的掌握了! 确定dp数组(dp table)以及下标的含义 确定递推公式 dp数组如何初始化 确定遍历顺序 举例推导dp数组 发出这样的问题之前,其实可以自己先思考这三个问题: 这道题目我举例推导状态转移公式了么? 我打印d
阅读全文
摘要:满二叉树:如果一棵二叉树只有度为0的结点和度为2的结点,并且度为0的结点在同一层上,则这棵二叉树为满二叉树。深度为k,有2^k-1个节点的二叉树。 完全二叉树:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最底层为第 h
阅读全文
摘要:栈:只允许在一端进行插入或删除操作的线性表 操作特性:后进先出(LIFO) 顺序栈 共享栈 链栈 基本运算:初始化、判栈空、进栈、出栈、读栈顶元素 队列:只允许在表的一端进行插入,另一端进行删除 操作特性:先进先出(FIFO) 队列顺序存储 队列的链式存储 基本操作:初始化、判队空、入队、出队、读队
阅读全文
摘要:排序稳定性:相等的两个元素,排序后的顺序和排序前保持一致即稳定。 排序算法性能度量:时间性能、辅助空间、算法复杂性 1.冒泡排序 基本思想:两两比较相邻记录的关键字,如果反序则交换,直到没有反序的记录。 public void bubbleSort(int[] elem) { for (int i
阅读全文
摘要:1.线性表(list):零个或多个数据元素的有限序列 数组和链表的区别: (1)存储方式不同数组是连续存储,数组在创建时需要一个整块的空间。链表是链式存储,链表在内存空间中不一定是连续的。数组一般创建在栈区,链表一般创建在堆区,在增加节点时需要new或malloc新节点,相较于数组长度不固定,自由度
阅读全文