失效链接处理 |
算法复习 PDF 下载
本站整理下载:
相关截图:
主要内容:
一 数据结构的存储方式 数 数据结构的存储方式只有两种 数 : 1. 数组(顺序存储) 2. 链表(链式存储) 二者的优缺点如下: 二1. 数组数 由于是紧凑连续存储,可以随机访问,通过索引快速找到对应元素,而且相对节约存储空间。但正因为连续存储,内存空间必须一次性分配够,所以 说数组如果要扩容,需要重新分配一块更大的空间,再把数据全部复制过去,时间复杂度 O(N);而且你如果想在数组中间进行插入和删除,每次必须搬 移后面的所有数据以保持连续,时间复杂度 O(N)。 2. 链表链 因为元素不连续,而是靠指针指向下一个元素的位置,所以不存在数组的扩容问题;如果知道某一元素的前驱和后驱,操作指针即可删除该元素或 者插入新元素,时间复杂度 O(1)。但是正因为存储空间不连续,你无法根据一个索引算出对应元素的地址,所以不能随机访问;而且由于每个元素必须 存储指向前后元素位置的指针,会消耗相对更多的储存空间。 二 数据结构基础 数 1.链表必刷题 链递归反转链表的一部分 https://leetcode-cn.com/problems/reverse-linked-list-ii/ K个一组反转链表 https://leetcode-cn.com/problems/reverse-nodes-in-k-group/ 回文串链表 https://leetcode-cn.com/problems/palindrome-linked-list/ 2.队列实现栈 队 |栈实现队列 栈 用栈实现队列https://leetcode-cn.com/problems/implement-queue-using-stacks/ 用队列实现栈https://leetcode-cn.com/problems/implement-stack-using-queues/ 3.单调栈结构解决三道算法题 单下一个更大元素 Ihttps://leetcode-cn.com/problems/next-greater-element-i/ 下一个更大元素 IIhttps://leetcode-cn.com/problems/next-greater-element-ii/ 每日温度https://leetcode-cn.com/problems/daily-temperatures/ 4.单调队列结构解决滑动窗口问题 单滑动窗口最大值https://leetcode-cn.com/problems/sliding-window-maximum/ 5.二叉堆详解实现优先级队列 二二叉堆其实就是一种特殊的二叉树(完全二叉树),只不过存储在数组里。一般的链表二叉树,我们操作节点的指针,而在数组里,我们把数组索引作为指 针,二叉堆还分为最大堆 最 和最小堆 最 。最大堆的性质是: 。 每个节点都大于等于它的两个子节点 每 。类似的,最小堆的性质是:每个节点都小于等于它的子节 点。优先级队列这种数据结构有一个很有用的功能,你插入或者删除元素的时候,元素会自动排序,这底层的原理就是二叉堆的操作。 优先级队列有两个主要 API,分别是 insert 插入一个元素和 delMax 删除最大元素(如果底层用最小堆,那么就是 delMin)。https://labuladong.gitbook.io/algo/shu-ju-jie-gou-xi-lie/shou-ba-shou-she-ji-shu-ju-jie-gou/er-cha-dui-xiang-jie-shi-xian-you-xian-ji-dui-lie 三 树 1.二叉树 二二叉树遍历 void traverse(TreeNode root) { // 前序遍历 traverse(root.left) // 中序遍历 traverse(root.right) // 后序遍历 } N叉树的遍历 /* 基本的 N 叉树节点 */ class TreeNode { int val; TreeNode[] children;
}void traverse(TreeNode root) { for (TreeNode child : root.children) traverse(child); } 3.二叉树必刷题 二反转二叉树https://leetcode-cn.com/problems/invert-binary-tree/ 填充每个节点的下一个右侧节点指针https://leetcode-cn.com/problems/populating-next-right-pointers-in-each-node/ 将二叉树展开为链表https://leetcode-cn.com/problems/flatten-binary-tree-to-linked-list/ 最大二叉树https://leetcode-cn.com/problems/maximum-binary-tree/ 从前序与中序遍历序列构造二叉树 https://leetcode-cn.com/problems/construct-binary-tree-from-preorder-and-inorder-traversal/ 寻找重复的子树https://leetcode-cn.com/problems/find-duplicate-subtrees/ 4.二叉搜索树( 二 BST) 二叉搜索树中第K小的元素https://leetcode-cn.com/problems/kth-smallest-element-in-a-bst/ 把二叉搜索树转换为累加树https://leetcode-cn.com/problems/convert-bst-to-greater-tree/ 删除二叉搜索树中的节点https://leetcode-cn.com/problems/delete-node-in-a-bst/ 二叉搜索树中的插入操作https://leetcode-cn.com/problems/insert-into-a-binary-search-tree/ 二叉搜索树中的搜索https://leetcode-cn.com/problems/search-in-a-binary-search-tree/ 验证二叉搜索树https://leetcode-cn.com/problems/validate-binary-search-tree/ 四 基础算法 基
|