
数据结构
stable_阿甘
用心学习,用心做事
展开
-
查找树(AVL、B、B+、红黑树)
一、二叉查找树(BST) 1.1 定义 二叉查找树或者是一棵空树,或者是具有下列性质的二叉树: 若他的左子树不为空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不为空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树也分别是二叉搜索树。 二叉查找树的查找时间复杂度最优为 O(logN),添加结点的时间复杂度为 O(1),删除结点的时间复杂度最优为 O(logN),查找快于链表,添加和删除快于数组。 1.2 插入 BST 的插入操作非常简单,只需要找到插入的位置改变一下索引原创 2020-05-19 12:07:49 · 1282 阅读 · 0 评论 -
递归
一、递归定义 有时,解决一个问题最好的方法可以通过解决和该问题一模一样的子问题来进行求解。递归是一种通过解决相同类型的子问题来解决某一个问题的技术。 例,求等差数列前 n 项和: int sum(n) { if(n == 1) return 1; else return sum(n - 1) + n } 解决问题的思路是: sum(n) = sum(n - 1) +...原创 2020-04-19 22:13:39 · 110 阅读 · 0 评论 -
快排和归并排序概述
一、快排 1.1 基本思想 快排是冒泡排序的升级,它们都属于交换排序类。 快排的基本思想是:通过一趟排序将待排记录分割成独立的两部分,其中一部分记录的关键字均比另一部分的关键字小,则可对这两部分记录继续进行排序,以达到整个序列有序的目的。(参考自《大话数据结构》) 1.2 代码实现 //快排 class Solution { public int[] sortArray(int[]...原创 2020-04-19 22:11:59 · 451 阅读 · 0 评论 -
堆和堆排序
一、什么是堆 认识堆以前,首先要明确两个概念:满二叉树 和 完全二叉树: 满二叉树:在一棵二叉树中,如果所有分支节点都存在左子树和右子树,并且所有叶子都在同一层上,这样的二叉树称为满二叉树。 完全二叉树:对一棵具有 n 个节点的二叉树按层序编号,如果编号为 i 的节点与同样深度的满二叉树中编号为 i 的节点在二叉树中的位置完全相同,则这棵二叉树称为完全二叉树。 堆:堆是具...原创 2020-04-19 22:10:02 · 187 阅读 · 0 评论 -
最长回文串
一、题目描述 给定一个包含大写字母和小写字母的字符串,找到通过这些字母构造成的最长的回文串。 在构造过程中,请注意区分大小写。比如 "Aa" 不能当做一个回文字符串。 注意: 假设字符串的长度不会超过 1010。 示例 1: 输入: “abccccdd” 输出: 7 解释: 我们可以构造的最长的回文串是"dccaccd", 它的长度是 7。 二、解法 本题思路简...原创 2020-03-21 19:53:33 · 163 阅读 · 0 评论 -
最长无重复子串
一、题目描述 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。 示例 1: 输入: “abcabcbb” 输出: 3 解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。 示例 2: 输入: “bbbbb” 输出: 1 解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。 示例 3: 输入: “bbbbb” 输...原创 2020-03-21 19:53:10 · 1131 阅读 · 0 评论 -
单链表反转
单链表反转 package LinkListReview; class ListNode { int val; ListNode next; public ListNode(int val) {this.val = val;} } /** * 题目描述:反转一个单链表。 * ------------------------------------------- ...原创 2020-03-12 23:30:39 · 107 阅读 · 0 评论 -
稀疏矩阵的转置
稀疏矩阵的转置 设带转置矩阵 A 的列为 col,共有 num 个元素, 使用了两种方法进行转置,一种时间复杂度是 O(col* num),一种时间复杂度是O(max(col, num)) //矩阵中的元素 class Item { int row; int col; int item; public Item(int row, int col, int...原创 2020-03-09 23:54:53 · 358 阅读 · 0 评论