自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(28)
  • 资源 (1)
  • 问答 (2)
  • 收藏
  • 关注

原创 LeetCode动画 | 699.掉落的方块

今天分享一个LeetCode题,题号是699,标题是掉落的方块,题目标签是线段树,题目难度是困难。这篇文章写着写着,篇幅就变得有点长了,但是这对你很有帮助,因为我在写Java代码过程中进行了两步优化,过程都写下来了。后面也会贴Go语言代码,记得收哦,简单对比了Java和Go语言的执行分析,对学习Go语言有好处的。题目描述在无限长的数轴(即 x 轴)上,我们根据给定的顺序放置对应的正方形方块...

2020-02-28 14:51:35 941

原创 布尔值数组的状态压缩

今天做一个LeetCode题发现一个小技巧,特来与你们分享一下。做的LeetCode题是关于二维矩阵的图论建模,像下面这样的:二维矩阵可以不产生一个图结构,直接在二维矩阵上计算。相应地,会设定一个布尔值数组visited[ i ] [ j ],表示某一个位置是否被遍历,true表示被遍历,false表示未被遍历。我们首先看看图论建模是如何建模的, 二维数组会有两个索引下标i和j,分别对阵为...

2020-02-26 20:58:23 1004

原创 程序员想知道代码是怎样跑起来的

程序员使用Java语言实现累加求和的方法,将文件命名为Sample.java。public class Sample { public static void main(String[] args) { System.out.println(sum(10)); } private static int sum(int n) { int r...

2020-02-26 20:46:53 2080

原创 LeetCode动画 | 218.天际线问题

今天分享一个LeetCode题,题号是218,标题是天际线问题,题目标签是线段树和Line Sweep [ 扫描线算法 ] ,题目难度是困难。最近新学了Go语言,来尝试一下效果,同时后面也贴出了Java代码【线段树和线扫描】。题目描述城市的天际线是从远处观看该城市中所有建筑物形成的轮廓的外部轮廓。现在,假设您获得了城市风光照片(图A)上显示的所有建筑物的位置和高度,请编写一个程序以输出由这些建...

2020-02-26 20:45:00 973

原创 动画 | 什么是二叉堆?

二叉堆的解释(动态选择优先级最高的任务执行)堆,又称为优先队列。虽然名为优先队列,但堆并不是队列。堆和队列是两种不同的数据结构,堆是树态的,队列是线性的。在队列中,我们可以向队列添加元素,取出的时候是按照进入队列的先后顺序取出元素的,先进先出;而在堆中,却不是按照元素添加的先后顺序,而是按照元素的优先级取出元素。所以二叉堆是为了找出最大或最小而生的,“大”和“小”并不是传统意义上的小大,而...

2020-01-27 14:10:09 374 1

原创 动画 | 什么是二分搜索树(二叉查找树)?

二分搜索树属性二分搜索树的又名比较多,有的叫二叉排序树,也有的叫二叉查找树,或者有序二叉查找树。是指一棵空树或者具有下列性质的二叉树:1.若任意节点的左子树不空,则左子树所有节点的值均小于它根节点的值;2.若任意节点的右子树不空,则右子树所有节点的值均小于它根节点的值;3.任意节点的左、右子树也分别为二叉查找树;4.没有键值相等的节点。它的查找、插入和删除的时间复杂度都等于树高,期望...

2020-01-27 14:07:20 929

原创 动画 | 什么是选择排序?

简单选择排序属性选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理如下。首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。回顾一下上次快速排序的优化,减少不必要的交换,以后在解决过程中可以把符合条件的元素位置标记下来,因此可以定义一个标记变量...

2020-01-27 14:04:57 931

原创 动画 | 什么是希尔排序?

希尔排序属性上篇写的直接插入排序算法时间复杂度是O(n^2),如果要令此排序算法的时间复杂度要低于O(n^2),必须是“远距离的元素交换”使得这组元素能提高有序的程度,然后进行直接插入排序的时候可以减少交换的工作量。那通过什么减少交换的工作量呢?希尔排序可以解决这个问题。希尔排序在做直接插入排序之前,希望可以对原整个待排序列进行预处理,目的是为了最后一步直接插入排序的时候可以减少交换次数,...

2020-01-27 13:53:46 1049

原创 动画 | 什么是插入排序?

插入排序插入排序是比较简单也比较直接的一种排序算法。它是从一堆数据中取出一个数据并将它插入到已排序的数据中合适的位置。比如按身高排队,有一个人指挥排队从第二个人开始,按身高把当前的人安插到之前排序好队的合适的位置。或者打扑克牌,假设我们拿到了10,J,K,A这四张牌,然后拿到了Q这张牌,那如何让手中的五张牌变为升序呢?如果我们只学了冒泡排序和快速排序,初始状态是10,J,K,A,Q。如果...

2020-01-27 13:31:32 1420

原创 动画 | 什么是鸡尾酒排序?

鸡尾酒排序其实就是冒泡排序的变形,它的时间复杂度和冒泡排序一样,都是O(n^2),比快速排序要慢不少。鸡尾酒排序的思想有点像摆钟一样,从左到右,又从右到左。而冒泡排序只是单向执行。鸡尾酒排序也是交换排序,假设做一个升序排序,先从左到右,交换一趟把最大的数放置右边,然后从右到左,把最小的数放置左边。视频动画算法动画视频 地址CodeResult初始状态 [5, 1, 9, 3, 7...

2020-01-27 13:11:05 877

原创 动画 | 什么是快速排序?

快速排序属性上一篇文章介绍了冒泡排序和它的优化。这次介绍的快速排序是冒泡排序演变而来的算法,比冒泡排序要高效的很多。快速排序之所以快,是因为它使用了分治法。它虽然也是通过不断的比较和移动来实现排序的,只不过它的实现,增大了比较的距离和移动的距离。而冒泡排序只是相邻的比较和交换。快速排序的思想是,通过一趟排序将待排记录分割成独立的两部分,其中一部分记录的关键字均比另一部分记录的关键字小,则可...

2020-01-27 13:08:52 840

原创 动画 | 什么是冒泡排序?

冒泡排序冒牌排序算法时间复杂度最坏的情况是,最好的,说明冒泡排序是可以优化的,就看你有没有去发现。冒泡排序算法的过程是两个元素比较的大小,是典型的交换排序算法。快速排序算法和鸡尾酒排序算法也属于交换排序。我这篇介绍完之后下一篇章会介绍快速排序和鸡尾酒排序。所以要自己学会关注哦,给这个公众号标上星标,不会迷失下一篇好文。排序方法比较相邻的元素,判断是否符合要求,如果不符合就交换位置来达到排...

2020-01-27 13:05:41 905

原创 动画 | 什么是基数排序?

基数排序和计数排序一样无需进行比较和交换,和桶排序一样利用分布和收集两种基本操作进行排序。基数排序是把每一个元素拆成多个关键字,一个关键字可以在每一个元素上同等的位置进行计数排序,一个元素拆成多个关键字可以看作是要进行几轮分桶,以一个元素最长的长度为准。基数排序可以看成多(单)关键字的排序,可以想象成桶排序那样分桶排序,也可以像计数排序那样归约化分治。基数排序的思想是将待排序序列中的每组关键字...

2020-01-27 11:12:10 898

原创 动画 | 什么是平衡二分搜索树(AVL)?

二分搜索树又名有序二叉查找树,它有一个特点是左子树的节点值要小于父节点值,右子树的节点值要大于父节点值。基于这样的特点,我们在查找某个节点的时候,可以采取二分查找的思想快速找到这个节点,时间复杂度期望值是为O(log n),但是它有最坏的的情况下。例如,输入数组[9,7,5,3,1],如果要满足二分搜索树的规则插入一个个节点,这样的二叉树会退化成一条线性表,待会查找元素的时候时间复杂度已达O(N...

2020-01-27 10:57:18 1034

原创 动画 | 什么是2-3树?

我们回忆一下AVL树,它在插入和删除节点时,总要保证任意节点左右子树的高度差不超过1。正是因为有这样的限制,插入一个节点和删除一个节点都有可能调整多个节点的不平衡状态。频繁的左旋转和右旋转操作一定会影响整个AVL树的性能,除非是平衡与不平衡变化很少的情况下,否则AVL树所带来的搜索性能提升不足以弥补平衡树所带来的性能损耗。那有没有绝对平衡的一种树呢?没有高度差也不会有平衡因子,没有平衡因子就不会...

2020-01-26 14:28:53 1045

原创 动画 | 什么是红黑树?(与2-3树等价)

学习过2-3树之后就知道应怎样去理解红黑树了,如果直接看「算法导论」里的红黑树的性质,是看不出所以然。我们也看看一颗二分搜索树满足红黑的性质:1.每个节点或是红色的,或是黑色的;2.根节点是黑色的;3.每个叶子节点(NIL)是黑色的;4.如果一个节点是红色的,则它的两个子节点都是黑色的;5.对每个节点,从该节点到其所有后代叶子节点的简单路径上,均包含相同数目的黑色节点。如果说前面4个还...

2020-01-26 14:24:34 917

原创 动画 | 什么是2-3-4树?

画了一系列树的动画,从二分搜索树,到AVL树,再到2-3树,再到基于2-3树的红黑树,都可以发现这些树都跟二叉查找树很像啊。嘿嘿!二分搜索树就是二叉查找树;AVL树也是一颗二分搜索树,只多了高度差的限制;2-3树虽满足二分搜索树的性质,但不是一颗二分搜索树,2-3树由2-节点和3-节点组成的,满足了完美平衡性;基于2-3树的红黑树就是希望不要有3-节点,将3-节点转换成二叉,两个元素之间由红链接相...

2020-01-26 14:16:28 909

原创 LeetCode动画 | 1038. 从二叉搜索树到更大和树

今天分享一个LeetCode题,题号是1038,标题是:从二分搜索树到更大和数。题目描述给出二叉搜索树的根节点,该二叉树的节点值各不相同,修改二叉树,使每个节点 node 的新值等于原树中大于或等于 node.val 的值之和。提醒一下,二叉搜索树满足下列约束条件:1)节点的左子树仅包含键小于节点键的节点。2)节点的右子树仅包含键大于节点键的节点。3)左右子树也必须是二叉搜索树。示例...

2020-01-23 13:14:26 890

原创 动画 | 什么是红黑树?(与2-3-4树等价)

二分搜索树是为了快速查找而生,它是一颗二叉树,每一个节点只有一个元素(值或键值对),左子树所有节点的值均小于父节点的值,右子树所有的值均大于父节点的值,左右子树也是一颗二分搜索树,而且没有键值相等的节点。它的查找、插入和删除的时间复杂度都与树高成比例,期望值是O(log n)。但是插入数组如[],二分搜索树的缺点就暴露出来了,二分搜索树退化成线性表,查找的时间复杂度达到最坏时间复杂度O(n)。...

2020-01-23 12:49:32 878

原创 漫画 | 什么是散列表(哈希表)?

创建与输入数组相等长度的新数组,作为直接寻址表。两数之和的期望是Target,将Target依次减输入数组的元素,得到的值和直接寻址表比较,如果寻址表存在这个值则返回;如果不存在这个值则将输入数组中的元素插入寻址表,再进行输入数组中的下一个元素。再进一步优化可以将输入数组直接作为直接寻址表,控制对应的下标就好,代码如下:Code:直接寻址表class Solution { ...

2020-01-20 11:21:54 912

原创 动画 | 什么是2-3-4树?

画了一系列树的动画,从二分搜索树,到AVL树,再到2-3树,再到基于2-3树的红黑树,都可以发现这些树都跟二叉查找树很像啊。嘿嘿!二分搜索树就是二叉查找树;AVL树也是一颗二分搜索树,只多了高度差的限制;2-3树虽满足二分搜索树的性质,但不是一颗二分搜索树,2-3树由2-节点和3-节点组成的,满足了完美平衡性;基于2-3树的红黑树就是希望不要有3-节点,将3-节点转换成二叉,两个元素之间由红链...

2020-01-11 16:00:42 290

原创 动画 | 什么是基数排序?

基数排序和计数排序一样无需进行比较和交换,和桶排序一样利用分布和收集两种基本操作进行排序。基数排序是把每一个元素拆成多个关键字,一个关键字可以在每一个元素上同等的位置进行计数排序,一个元素拆成多个关键字可以看作是要进行几轮分桶,以一个元素最长的长度为准。基数排序可以看成多(单)关键字的排序,可以想象成桶排序那样分桶排序,也可以像计数排序那样归约化分治。基数排序的思想是将待排序序列中的每组关键字...

2019-12-19 16:01:27 245

原创 问题描述 the jar file jrt-fs.jar has no source attachment

问题描述 the jar file jrt-fs.jar has no source attachment在Eclipse中查看不了原始类,出现的问题描述如下:

2019-12-17 13:49:03 307

原创 动画 | 什么是快速排序?

快速排序属性上一篇文章介绍了冒泡排序和它的优化。这次介绍的快速排序是冒泡排序演变而来的算法,比冒泡排序要高效的很多。快速排序之所以快,是因为它使用了分治法。它虽然也是通过不断的比较和移动来实现排序的,只不过它的实现,增大了比较的距离和移动的距离。而冒泡排序只是相邻的比较和交换。快速排序的思想是,通过一趟排序将待排记录分割成独立的两部分,其中一部分记录的关键字均比另一部分记录的关键字小,则可...

2019-12-08 12:10:40 262

原创 hive启动报错:Unable to instantiate org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient

Exception in thread "main" java.lang.RuntimeException: java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient at org.apache.hadoop.hive.ql.ses...

2019-03-28 20:32:03 309

原创 安装elasticsearch-sql报错:Error: failed to fetch from registry: inherits/2.0.3

4797 error Error: failed to fetch from registry: inherits/2.0.34797 error at RegClient.<anonymous> (/usr/lib/node_modules/npm-registry-client/lib/get.js:140:18)4797 error at cb (/usr/l...

2019-03-21 21:51:22 335

原创 问题描述:Notepad++为什么没有插件管理Plugin Manager

背景:Notepad++下的是64位解决办法:需要下载相对应的64位的Plugin Manager0下载之后解压复制plugins和updater两个文件夹重启notepad++

2018-09-08 14:49:10 914

原创 问题描述:the jar file jrt-fs.jar has no source attachment

在Eclipse中查看不了原始类,出现的问题描述如下:背景:由于重装系统升级win10专业版之后,下载了jdk10工具包,发现jdk10跟之前安装jdk1.7的时候方式不一样,jdk7默认jre文件夹是在jdk下的。而现在jdk10中jdk和jre分开了,所以需要设置JAVA_HOME和JRE_HAOME的系统环境变量,具体设置的方法可以Google或者百度。解决办法:找到...

2018-09-08 11:32:41 1567

微信小程序百度翻译代码

下载用于微信小程序的百度翻译,只需要更换百度翻译APP ID和密钥就好了(有注释),没有百度翻译账号的前往注册就好了。

2018-05-17

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除