![](https://img-blog.csdnimg.cn/20210520162118220.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
算法
一个关于算法学习的专栏总结
油炸冰可乐
程序小白成长博客
展开
-
「算法设计」模拟Linux文件目录的简单规则
模拟Linux文件目录的简单规则规则1 cd a -> /a规则2 cd … -> cd …规则3 pwd -> 打印目录大致这三个切换问题的实现,和大家分享使用stack栈实现,cd x 就入栈,cd … 就出栈,栈为空时就打印 /注意pwd需要在前面补上 /package com.nowcoder.seckill.sort;import java.util.*;public class Linux { public static void main(St原创 2021-09-10 18:26:53 · 220 阅读 · 0 评论 -
Java工业级排序:Arrays.sort()
整体介绍length < 47 时采用插入排序(双插入排序),length > 286 时采用TimSort排序(归并排序),47 < length < 286 时采用双轴快排如果需要排序的数据类型为非基本数据类型,则只采用TimSort(优化的归并排序)参考LeetCode...原创 2021-08-21 09:58:25 · 255 阅读 · 0 评论 -
堆排序Java实现
堆排序Java实现class Solution { public int[] sortArray(int[] nums) { int n = nums.length; // 创建一个完全二叉树(这样就可以使用数组的表示来表示堆了!) buildHeap(nums,n); for(int i = n - 1; i >= 0; i--){ // 头结点元素与最末端元素进行交换 swap(nu原创 2021-08-11 08:20:05 · 299 阅读 · 0 评论 -
「二叉树」二叉树中序线索化与遍历Java实现
「二叉树」二叉树中序线索化与遍历Java实现 线索化二叉树是基于二叉树的升级,它将二叉树叶子节点没有用到的左右空指针进行利用,通过判断后将它们指向前驱与后继结点,例如下图8号元素,前驱为null,后继结点为3号,利用了8号元素原本为null的右指针,将它指向3号元素。(8号的左指针不需要强行指向,因为只有null)1-中序线索化二叉树首先需要在二叉树中定义两个标识符(leftType与rightType),用来对前驱结点与后继结点进行区分leftType:=0时,说明它的左边是左子树;=1时,说明原创 2021-07-19 16:01:58 · 385 阅读 · 1 评论 -
各种树的优缺点
树二叉树平衡二叉树B树B+树面临的问题:哈希索引问题回旋查找问题 --> 范围查找树高问题范围查找问题1-哈希索引问题因为哈希值是一个无序值,所以使用哈希值作为索引无法应对范围查找、顺序查找问题;哈希值可能会发生冲突2-平衡二叉树可以有效的控制左右子树的高度,左右子树的高度差最大为1同样无法进行范围查找3-B树B树结构:B 树的所有节点既存放键 (key) 也存放数据 (data),而 B + 树只有叶子节点存放 key 和 data,原创 2021-07-15 09:43:56 · 841 阅读 · 0 评论 -
二叉树查找指定结点
二叉树查找指定结点查找方式分为三种:前序查找中序查找后续查找代码实现一下~class HeroNode{ // 1 前序查找 public HeroNode preOrderSearch(int no){ System.out.println("前序查找"); HeroNode temp = null; // 定义一个存储结点 if (this.no == no){ return this; // 比较当前原创 2021-07-12 10:35:43 · 1586 阅读 · 0 评论 -
二叉树Java实现
二叉树Java实现养成好习惯,先上思维导图1-数组List以ArrayList为例,它的底层是通过list数组进行实现的,所以可以通过这个点进行分析!**优点:**数组能够通过下表直接进行访问,也可以通过各种查找方法进行查找!查找可以十分快速。**缺点:**由于list在增添或删除时(插入元素),过程中需要对数组进行扩容,这个操作会调用ArrayList数组中的grow方法,本质上会在内存中开辟新的数组,耗费时间!2-链表Linked**优点:**链表可以进行十分快速的增添与删除,得益于链表原创 2021-07-11 17:11:12 · 128 阅读 · 1 评论 -
哈希表Java实现
哈希表基本介绍:哈希表也称为散列表。根据关键码值key直接访问的数据结构。哈希表由多个链表共同组成哈希表由数组与链表共同实现[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3b2HuJEO-1625740185439)(C:\Users\Wzy\Downloads\1.jpg)]哈希表中,为了加快查找的速度,设置了映射函数,这个函数叫做散列函数,能够根据这个函数得到散列值。首先,需要先编写链表数据结构,然后,再将这个数据结构组织进哈希表,具体的做法为://原创 2021-07-08 18:30:22 · 224 阅读 · 2 评论 -
斐波那契查找算法
1-斐波那契查找算法思想这个算法不是很懂!需要再补充!(未完成)思想比较二分查找过程中,mid= left + (left + right) / 2插值查找过程中,引入了比例因素,mid = left + [(key - arr[left])/(arr[high] - arr[left])](high - left)斐波那契查找算法mid计算是通过下面公式实现的mid = left + fibList[fibIndex - 1] - 1; 可以使每一次的查询都接近黄金分割比2-代码实原创 2021-07-07 10:36:37 · 157 阅读 · 0 评论 -
插值查找算法Java实现
1-插值查找插值查找算法是对二分查找的升级做法,具体做法是二分查找与插值查找:修改了计算mid中间索引的公式2-插值查找的Java实现package select;/** * 插值查找 */public class InsertValueSearch { public static void main(String[] args) { int arr[] = {1, 8, 10, 89, 1000, 1000, 1234}; int i = i原创 2021-07-05 17:03:53 · 144 阅读 · 0 评论 -
位移法希尔排序Java代码实现
希尔排序希尔排序的实现有两种方法:希尔交换(速度慢)希尔位移(推荐方法)对排序问题,希尔排序的做法是在宏观层面将问题进行分解,使每一部分的微观排序有序,再将微观排序进行组合,再从宏观整体出发,实现数据排序。1-希尔思想案例原始数组:第一次分组(最微观排序):第二次分组(较微观排序):第三次分组(宏观排序):通过以上三个例子,观察出希尔排序的基本思想:将整体元素分解为若干个待排序的子序列(由增量元素gap完成分解),进行直接插入排序,然后依次缩减增量进行再排序,等到增量被缩减到原创 2021-06-26 16:19:42 · 165 阅读 · 0 评论 -
基数(桶)排序Java代码实现
基数(桶)排序Java代码实现基数排序也被称为桶排序,是一种使用空间换时间的做法。它的大致思想为:每个数字按低位到高位进行遍历排序,第几位就放在第几个桶中排序完成以后,再将桶内数组取出重新放入原始数组,最后清空不断往复1-2过程,直到对数字的每个位都进行了操作,既完成了排序图解(待完成)不足:只针对正数的排序一些细节:基数排序的时间复杂度位NxK,K代表着桶的个数。有人会好奇,0-9对应的这10个桶在进行操作的时候,比如说个位遍历结束后,准备遍历十位时,不需要对10个桶进行清空吗原创 2021-06-26 15:47:02 · 188 阅读 · 0 评论 -
算法复杂度
算法复杂度算法的复杂度分为时间复杂度、空间复杂度,但一般我们只讨论的是时间复杂度,使用O()进行表示。计算代码的时间复杂度通过以下步骤完成:用常数1取代运行时间所有的加法常数修改后的运行次数函数中,只保留最高项如果最高阶项目存在且不是1,去除与这个项相乘的常数,得到最终结果总结一下就是:我们需要清楚的知道,到底在程序的哪一个环节出现了复杂度的增加,复杂度增加的决定性因素出现在哪里?一般地,算法复杂度有常数阶(循环次数与问题无关代码)线性阶(循环n次)对数阶(例如while循环)n原创 2021-06-14 19:09:41 · 89 阅读 · 0 评论 -
面试比较重要的数据结构与算法习题
排序:大部分要求能手写,并分析时间空间复杂度,以及稳定性树:红黑树的原理以及在 JDK 的使用;B+ 树以及在数据库索引中的使用图:拓扑排序;并查集;最短路径;最小生成树散列表:实现原理,以及在 JDK 中的使用字符串:KMP;AC 自动机;Trie 树...原创 2021-06-10 21:26:06 · 95 阅读 · 3 评论 -
「栈」逆波兰表达式(后缀表示法)计算实现
逆波兰表达式(后缀表示法)计算实现在逆波兰记法中,所有操作符置于操作数的后面,因此也被称为后缀表示法。逆波兰记法不需要括号来标识操作符的优先级。后缀表示法的意思就是,为两个数字匹配一个计算符号,将这个符号放置在这两个数字的后方。例子1:(30+4)×5-6 => 30 4 + 5 × 6 - => 164例子2:(3+4)x5-6 => 3 4 + 5 * 6 - ==>29逆波兰表达的好处是,不需要对符号的优先级进行排序实现分析:首先,需要对后缀表达式进行遍历,原创 2021-05-31 21:25:48 · 234 阅读 · 0 评论