数据结构与算法总结篇
文章平均质量分 90
数据结构与算法
Mona______
好好学习天天向上 o(≧v≦)o
展开
-
链表总结点睛
链表专题首先来与数组一波比对:链表是和数组同等重要的底层数据结构。* 数组适用于数据量固定,频繁查询,较少增删* 链表适用于数据量不固定,频繁增删,较少查询* 「链表操作的两种方式:」 1、直接使用原来的链表来进行操作。 2、设置一个虚拟头结点在进行操作。1、直接使用原来的链表进行移除节点操作要分三种情况: * 1、删除的节点为头结点。注意仅用if做一次判断可是不对的哦!要用while进行循环判断 * 2、删除的节点为非头结点。循环嵌套if-else判断语句实现 * 3、第原创 2021-04-20 21:51:16 · 118 阅读 · 0 评论 -
哈希表总结点睛
哈希表又称 散列表、 Hash table。哈希表就是根据关键吗的值而直接进校访问的数据结构其实数组就是一张哈希表,数组的索引为key,数组的元素为value。数据规模是dataSize, 哈希表的大小为tableSize哈希表能解决什么问题呢?一般是用来快速判断一个元素是否出现集合里。哈希碰撞有两种解决办法:1、拉链法:拉链法就是要选择适当的哈希表的大小,这样既不会因为数组空值而浪费大量内存,也不会因为链表太长而在查找上浪费太多时间。2、线性探测法:使用线性探测法,一定要保证tab原创 2021-04-23 20:58:08 · 895 阅读 · 0 评论 -
二叉树总结点睛
一、二叉树1、常见名词DFS (depth first search ) 深度优先遍历BFS (breadth first search ) 广度优先遍历AVL(Adelson-Velsky and Landis) 平衡二叉搜索树2、常见分类满二叉树:是一种特殊的完全二叉树。只有度为0的节点和度为1的节点,且度为0的节点在同一层完全二叉树:除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。二叉搜索树:前面两种原创 2021-04-27 23:51:33 · 537 阅读 · 0 评论 -
贪心算法总结
一、基本概述本质: 贪心的本质是选择每一段的局部最优,从而达到全局最优。难点: 唯一的难点就是如何通过局部最优,推出整体最优。做题方法: 毫无套路可言,最好用的策略就是多举几个测试用例,看一下贪心是否合适。大致步骤:将问题分解为若干个子问题找出适合的贪心策略求解每一个子问题的最优解将局部最优解堆叠成全局最优解二、做题第455题 分发饼干一个数组表示 每个小孩对应的胃口一个数组表示 每块饼干对应的尺寸大部分情况下处理两个数组都会想到用两层 for 循环,但是本题中,可原创 2021-06-20 23:53:51 · 298 阅读 · 1 评论 -
二叉树总结点睛
一、二叉树1、常见名词DFS (depth first search ) 深度优先遍历BFS (breadth first search ) 广度优先遍历BST (binary search tree) 二叉搜索树AVL(Adelson-Velsky and Landis) 平衡二叉搜索树heap 堆2、常见分类满二叉树:是一种特殊的完全二叉树。只有度为0的节点和度为2的节点,且度为0的节点在同一层什么是二叉树的度:就是二叉树中 节点和 节点 的线,有原创 2021-06-20 23:47:53 · 569 阅读 · 2 评论 -
动态规划总结点睛
终于到这个专题啦 ~~~ 激动的搓手手!一、基础知识动态规划:Dynamic Programming (DP),如果某一问题有很多重叠子问题,实验DP是最有效的因此只要是 当前状态可以根据前面的状态推出来 的题型,就能用动归。动态规划中每一个状态一定是由上一个状态推导出来的,这一点区分与贪心,贪心没有状态推导,而是从局部直接选最优、贪心解决不了动态规划的问题。01、花花讲解要求:最优子结构可以通过把它分解成子问题,然后递归地找到子问题的最优解来得到最优解。重叠子问题子问题是重叠的,这样我们只原创 2021-06-20 23:44:21 · 1032 阅读 · 1 评论 -
位运算总结点睛
一、知识储备移位 运算符< <// 示例一:// 这里定义为 1 << nums.size() 的形式,令 n = nums.size()// 其的十进制是 2^n ,二进制就是 第 n 位是1 ,其余为 0 的一串 二进制数,注意这里是从 0 开始数的。memo = vector<vector<int>>(k+ 1, vector<int>(1 << nums.size(), -1));// 示例二:res |= b原创 2021-06-20 23:42:55 · 199 阅读 · 0 评论 -
栈与队列总结点睛
栈 stack队列 queue1、栈 & 队列1、stack和queue都不是容器,而是容器适配器2、Standard Template Library ,即STL标准模板库,C++中三个最为普遍的STL版本:1、HP STL这个是 c++ STL的第一个实现版本,但不够成熟2、P.J.Plauger STL被visual c++编译器采用,不是开源的3、SGI STL (常用的)Linux的C++编译器 GCC 所采用的,开源通常我们所使用的的STL就是原创 2021-04-27 23:49:43 · 207 阅读 · 0 评论 -
数组总结点睛
数组专题1、要注意vector、array、数组三者的区别:vector的底层实现是array,严格来讲,vector是容器,不是数组。共同点:* 1、都可以用下标操作进行处理* 2、都可以用迭代器进行操作* 3、三者的存储都是连续的,可以进行随机访问* 4、都是对同一种类型的数据进行储存。不同点:* 1、数组是不安全的,array和vector是比较安全的(因为可以有效地避免越界等问题)* 2、array对象和数组存储在相同的内存区域(栈)中,vector对象存储在自由存储区(堆)原创 2021-04-19 20:33:36 · 106 阅读 · 0 评论 -
回溯算法总结点睛
一、基本概念1、什么是回溯法?又称回溯搜索法,说白了就是一种搜索方式。其实回溯是递归的副产品,只要有递归就会有回溯。回溯函数也可以称之为递归函数。2、回溯法的效率回溯法本质是穷举,因此并不高效可以通过一些剪枝的操作稍微提高一些效率,但仍是比较低效的算法3、回溯法解决的问题经常用来解决以下 5 种问题:* 1)组合问题:**不强调**元素的顺序,N个数里按照一定的规则找出K个数的集合* 2)排列问题:**强调**元素的顺序,N个数按一定的规则全排列,求有多少排列方式* 3)切割问题:一原创 2021-06-20 23:46:41 · 3899 阅读 · 1 评论 -
字符串总结点睛
1、数组填充问题很多数组填充类的问题,都可以先预先给数组扩容带填充后的大小,然后在从后向前进行操作。利用双指针,从后往前进行填充这么做有两个好处: * 不用申请新数组。 * 从后向前填充元素,避免了从前先后填充元素要来的 每次添加元素都要将添加元素之后的所有元素向后移动2、字符串和数组的差别字符串是若干字符组成的有限序列,也可以理解为是一个字符数组,但是很多语言对字符串做了特殊的规定,接下来我来说一说C/C++中的字符串。在C语言中,把一个字符串存入一个数组时,也把结束符 '\0'存入数原创 2021-04-25 13:22:15 · 105 阅读 · 0 评论 -
KMP 算法
1、KMP算法KMP 就是三位创造者的名字缩写 Knuth,Morris和PrattKMP 是为了解决字符串匹配的问题,极大的提高的搜索的效率。通俗来讲也就是 在一个串中查找是否出现过另一个串KMP 算法的时间复杂度是O(n+m), 对比暴力解法时间复杂度是 O(m*n), 其中m n 是文本串与模式串的长度KMP 经典思想就是: 当出现字符串不匹配时,可以记录一部分之前已经匹配的文本内容,利用这些信息避免从头再去做匹配。讲解过程中使用的例子:文本串: aabaabaaf模式串:原创 2021-05-23 00:15:40 · 930 阅读 · 0 评论