
数据结构与算法
记录本人在学习数据结构与算法的心理路程
哎呦okay
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
熟烂于肚的归并排序
目录归并排序原理-总览原理-合并两个有序数组递归实现性能分析非递归实现归并排序原理-总览归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide andConquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并原理-合并两个有序数组实际就是在arr这一个数组中进行操作,只是每...原创 2020-06-10 20:19:22 · 250 阅读 · 0 评论 -
indispensable 的HashMap
HashMap概述HashMap的底层是哈希表这种数据结构,提供映射操作,并允许使用null作为key,null作为value,但是它不保证键值对放入的顺序HashMap的内部存储结构在Java中数据存储方式最底层的两种结构,一种是数组,另一种是链表;数组的特点:空间连续,逻辑连续,寻址迅速,但是在增加或者删除元素时需要较大幅度的移动,而查询速度快,增删较慢,而链表恰恰相反链表的特点:空间不连续,逻辑连续,寻址不容易,所以查询速度慢,增删快那么有没有一种数据结构结合了数组和链表的优点原创 2020-05-14 21:21:43 · 234 阅读 · 0 评论 -
海量数据TopK问题
TopK问题:在大量的数据中找出前k个最大值或者最小值对于海量数据,如果我们只需要找出其中最大的k个或者最小的k个,怎样才能找出呢?假设我们对所有的数据进行排序,时间复杂度(快速排序):O(nlog2n); 如果这是数亿个数据,那这样的方法也就不那么高效了哪哈有没有更加高效的方法呢?利用堆来解决TopK问题(以最大的k个举例)我们知道大根堆的堆顶是堆中的最大元素;...原创 2020-04-20 16:23:45 · 465 阅读 · 0 评论 -
逻辑清晰、简单明了的堆排
堆的概念 堆逻辑上是一颗完全二叉树 堆物理存储是存储在数组中 满足任意节点的值都大于其子树中节点的值,叫做大堆,或者大根堆 满足任意节点的值都小于其子树中节点的值,叫做小堆,或者小根堆 堆的作用:快速找出集合中的最值 下标关系已知双亲(parent)的下标,则:左孩子(left)下标= 2 * parent + 1;右孩子(r...原创 2020-04-07 16:49:51 · 230 阅读 · 0 评论 -
二叉树的前中后序遍历——非递归及层序遍历
二叉树的前中后序遍历都是深度优先,而对于深度优先的遍历方式,就会和栈扯上关系;非递归实现原创 2020-04-06 18:17:21 · 185 阅读 · 0 评论 -
熟烂于肚的快速排序
快速排序原理从待排序区间选择一个数,作为基准值(pivot); Partition: 遍历整个待排序区间,将比基准值小的(可以包含相等的)放到基准值的左边,将比基准值大的 (可以包含相等的)放到基准值的右边; 采用分治思想,对左右两个小区间按照同样的方式处理,直到小区间的长度 == 1,代表已经有序,或者小区 间的长度 == 0,代表没有数据;快速排序是一种划分交换的方法,它采用分治...原创 2020-03-31 20:46:32 · 140 阅读 · 0 评论 -
二叉树的前中后序遍历——递归
什么是树首先先了解下什么是树形结构:树是一种非线性的数据结构,它是由n(n>=0)个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。它具有以下的特点:每个结点有零个或多个子结点; 没有父结点的结点称为根结点; 每一个非根结点有且只有一个父结点; 除了根结点外,每个子结点可以分为多个不相交的子树概念节点的...原创 2020-03-24 18:39:01 · 1063 阅读 · 0 评论 -
一篇文章学会基本的二分查找
本文以问答的形式,探究二分查找的基本应用场景:寻找一个数,寻找左侧边界,寻找右侧边界。第一个场景是最简单的算法形式二分查找框架int binarySearch(int[] nums, int target) { int left = 0; int right = ...; while(...) { int mid = (right + l...原创 2020-03-21 14:56:53 · 205 阅读 · 0 评论 -
ArrayList的常见用法
ArrayList概述ArrayList 实现了 List 接口,底层是一个数组,元素存储是按照顺序存储的,所以常用来当作顺序表来用具体的继承实现关系请小手点这里ArrayList 变量的创建直接实例一个 ArrayList 对象 通过向上转型来创建一个 ArrayList 对象例如import java.util.ArrayList;import java.uti...原创 2020-03-19 22:04:03 · 224 阅读 · 0 评论 -
数据结构——队列
目录什么是队列?如何实现队列?什么是队列?先进先出,后进后出,这就是典型的“队列”结构支持两个操作:入队 offer(),放一个数据到队尾;出队 poll(),队首元素出队所以和栈一样,队列也是一种操作受限的线性表如何实现队列?public interface Queue<T> { public void offer(T item...原创 2020-03-01 19:41:58 · 204 阅读 · 0 评论 -
数据结构——栈
1.什么是栈先进后出,后进先出,这就是典型的栈结构 从栈的操作特性来看,是一种 操作受限 的线性表,只允许在端插入和删除数据2.为什么需要栈栈是一种操作受限的数据结构,其操作特性用数组和链表均可实现 但任何数据结构都是对特定应用场景的抽象,数组和链表虽然使用起来更加灵活,但却暴露了几乎所有的操作,难免会引发错误操作的风险 所以,当某个数据集合只涉及在某端插入和删除数据,...原创 2020-02-19 21:36:57 · 165 阅读 · 0 评论