- 博客(126)
- 资源 (3)
- 收藏
- 关注
原创 Apollo的Portal界面操作
上一讲主要讲了Apollo配置中心如何通过client与之交互,演示了java如何接入的方式,接下来介绍的是Apollo界面的一些常规操作。
2020-04-03 10:56:24
2241
原创 Apollo配置中心的客户端调用
在上一讲中我们通过quick-start的方式将zip包部署到Linux上进而启动了apollo配置中心,而且也是同一台机器上打开了client,通过浏览器打开了Portal进行操作。
2020-04-01 16:13:34
1767
原创 动态规划的理论分析
动态规划适合解决什么问题?动态规划是一个很成熟的思想,很多人都对这些思想做了总结,可以用一句话概括就是:一个模型三个特征。
2019-10-17 20:43:54
902
3
原创 回溯算法
递归算法切记不要使用debug的方式层层深入进去,这样会把自己绕进去,而且问题也得不到解决。还是要理解递归的思想,从思想的角度去理解代码。
2019-10-04 22:26:15
603
原创 分治算法
分治算法的核心思想 分治算法的核心思想就是四个字,分而治之,也就是将原来的问题划分成n个规模较小,并且结构与原问题相似的子问题,递归地解决这些子问题,然后再合并其结果,就得到原问题的解. 看起来有点像递归,不过要知道分治算法是一种处理问题的思想,递归是一种编程技巧.看起来像是因为分治算法一般都比较适合用递归去实现分治算法递归实现步骤① 分解:将原问题分解问一系列的子问题;② 解决:递...
2019-10-04 18:15:56
2461
2
原创 贪心算法
背包装豆子问题 假设有一个可以容纳100Kg物品的背包,可以装各种物品,我们有以下五种豆子,每种豆子的总量和总价值都不同.为了让背包中装总价值最大的物品,我们需要如何选择放入背包中的豆子呢?每种豆子应该装多少? 这个问题的思路是:算出每种豆子的单价,即单位重量的价值。将单价最大的先放入背包中,就好比放入同样重量时金子和铁块,当然选择金子了。可以算出来由单价从高到低放入的是:20Kg给都、...
2019-10-04 15:22:00
746
原创 你了解Trie树吗
Trie树,也叫字典树,所以自然也是一个树形结构.Trie树是一种专门用来处理字符串匹配的数据结构,用来在一组字符串集合中快速查找某个字符串
2019-10-03 12:42:24
950
原创 TMD ,KMP!
以为搞清楚了BM算法的思想,就容易理解KMP了,shit!还是很难理解关于KMP算法中next数组是如何高效获得的,既然如此暂时不追究了,不过已然不妨碍把代码搞清楚!跟BM算法类似,KMP算法中主串和模式串的比对也有类似的东西如:坏字符和好前缀。没错,就是好前缀,BM算法中是好后缀,KMP算法中是好前缀!当遇到坏字符的时候,模式串依然是需要往后移动,对于KMP算法来说依然是设法一次滑动多个...
2019-10-01 23:07:44
486
原创 复杂的BM算法
这不刚刚看了字符串匹配算法中的BF和RK算法吗,想挑战点有难度的,于是就在这欢度假期的日子里,大早上到现在一直在看BM算法。据说这BM算法晦涩难懂,于是好奇就想一探究竟,记得看红黑树的时候咱也是一头雾水,这tem什么玩意,什么红的白的黑的绿的,类似于BM也一样,不过算法的思想我是理解了,比红黑树那哥们强一百倍好懂,虽然也很难懂吧!虽然说懂了,但是代码实现未必看得明白,懂思想和懂代码其实还是有距离的,懂代码和写下来也是不同的层次。
2019-10-01 18:17:12
274
原创 图的搜索-BFS和DFS
图的搜索算法最直接的理解就是在图中的一个顶点出发,到达另一个顶点的路径。图的搜索算法中,广度优先搜索BFS和深度优先搜索DFS就是最简单最粗暴的算法,因为也没什么优化空间,也叫暴力搜索算法。图的存储有两种方式:一种邻接矩阵,一种邻接表。本文主要使用邻接表来存储图。BFS和DFS都可以用在有向图或者无向图中。本文主要使用的是无向图。这两种搜索算法都只能适用于图不大的搜索。广度优先搜索算法...
2019-09-30 15:55:42
706
原创 图的基本概念及存储方式
图的基本概念图(Graph)是一种非线性数据结构。顶点:树中的元素我们叫做节点;图中的元素我们叫做顶点(vertex)。边:图中的一个顶点可以与任意其他顶点建立关系,我们把这种建立的关系叫做边(edge)。度:以微信为例,我们可以把每个用户看成一个顶点,如果两个用户之间互加好友,那就在两者之间建立一条边。所以整个微信的好友关系就可以用一张图来表示。其中每个用户有多少个好友,对应到图中就是...
2019-09-30 10:51:01
826
原创 递归树-分析时间复杂度
递归的思想就是把一个大问题分解为小问题,再把小问题继续分解下去,一直到无法再分为止。所以递归的核心思路就是找到递归公式和终止条件。那么什么是递归树?简单来说,这颗树是由递归的子问题组成树,树的节点就是递归的子问题。比如斐波那契数列的递归树就是这个样子:一个节点的求解可以分解为两个左右子节点的求解过程,就这样递归下去形成了斐波那契数列的递归树。归并排序的时间复杂度分析归并排序就是...
2019-09-03 10:52:01
2633
原创 二叉搜索树-BSTree
二叉搜索树,即Binary Search Tree.二叉搜索树又叫二叉查找树,或者二叉排序树。二叉搜索树要求,对于树中每一个节点,都要求左子树每个节点的值都小于当前节点值,右子树的每个节点值都大于当前节点的值。二叉查找树的查找操作我们从根节点开始查找,如果当前节点等于我们要查找的数据,那就返回。如果查找的数据比根节点的数据小,那就从左子树中递归查找。如果要查找的数据比根节点的...
2019-09-02 17:44:05
608
原创 树与二叉树
树的概念为了解释树的概念,我们用一幅图来说明:父节点:A节点就是B节点的父节点。子节点:B节点就是A节点的子节点。兄弟节点:B、C、D三个节点的父节点是同一个节点A,所以它们之间就是互为兄弟节点。根节点:没有父节点的节点,比如E就是根节点。叶子节点:又叫叶节点,没有子节点的节点就是叶子节点或叶节点,比如G、H、I、J、K、L都是叶子节点。节点高度:就是节点到叶...
2019-08-30 16:19:06
467
原创 Hash算法及其应用
Hash算法其实hash和散列表示的一个意思,所以hash表就是散列表,hash算法就是散列算法,hash函数就是散列函数。这说的hash算法,什么是hash算法?有一句很easy的总结:将任意长度的二进制串映射为固定长度的二进制串,这个映射规则就是hash算法。通过映射之后得到固定长度的二进制串值就是hash值。工业界的hash算法有很多比如md5、sha等。ps:hash算法无...
2019-08-30 14:43:40
758
原创 散列表-LRU缓存淘汰算法
LRU缓存淘汰算法,也就是最近最少使用缓存淘汰策略实现的算法。这里我们使用散列表和链表实现提高操作的时间复杂中度,达到O(1)
2019-08-30 14:07:32
539
原创 查找算法-跳跃表(SkipList)入门及复杂度分析
什么是跳表对于单链表这种数据结构,如果我们想查找一个结点需要从头到尾遍历所有结点,时间复杂度为O(n)效率非常低效。如果我们想办法在单链表的一些结点上加索引呢?如图图中原始链表每隔2个节点就抽出一个结点作为索引,抽出的这一层我们称之为“索引层”,第一层索引层我们称之为第一层索引。就比如我们想此时要查找10这个节点,我们需要遍历6个节点就可以找到。如果再抽取一个索引层...
2019-08-28 17:37:57
4306
原创 查找算法-二分查找的几种变体
唐纳德·克努特(Donald E.Knuth)在《计算机程序设计艺术》第三卷中说:“尽管第一个二分查找算法出现于1946年,然而第一个完全正确的二分查找算法直到1962年才出现。”
2019-08-28 11:17:57
515
1
原创 查找算法-有序数组的二分查找
二分查找的思想二分查找,在一个数组有序(比如从小到大)的情况下,如果想查找某个数值是否存在于数组中,这个时候就可以使用二分查找了。具体做法就是找出数组的中间下标的元素,然后拿查找值与其比较,如果查找值小于中间元素值,则缩小查找范围在小于中间元素的范围查找;否则,在大于中间元素值得范围查找。一直到找到查找值,或者区间缩小为0.图解:代码可以使用循环来实现,也可以使用递归。...
2019-08-27 16:37:26
3494
原创 排序算法-基数排序的时间复杂度分析
基数排序的思想基数排序,基数排序的思想是把位数相同的一组数组依次从后往前比较其每一位上的大小,经过几轮比较使得数据达到有序的做法。比较的次数跟数据的位数有关系。比如要比较一组手机号码从小到大排列,可以比较手机号每一位大小,然后比较11次,手机号达到有序。注意:基数排序每次位的比较可以使用线性排序的方式,比如桶排序或者计数排序,因为它们的时间复杂度为O(n),而且每轮的比较需要保证每次比较数...
2019-08-26 16:46:06
12827
1
原创 排序算法-计数排序的时间复杂度分析
计数排序的思想计数排序,当数据范围max不大的时候,可以使用一个长度为max+1,即[0,max]的数组用以存储数据出现的次数。根据这个数据出现的次数,通过一定的计算,就可以知道这个数据之前到底有多少个数据,那么自然就很容易知道这个数据在总体数据中的位置了。利用这个思想,我们就可以对一个范围不大的数组进行计数排序。计数排序的时间复杂度计数排序的时间复杂度是O(n),当然这个前提是数据范...
2019-08-26 15:45:58
3875
原创 排序算法-桶排序的时间复杂度分析
桶排序思想桶排序,是一种基于非比较的排序方式,时间复杂度O(n),因此它是是属于一种“线性排序”。思想:桶排序的思想是将一组数据分到几个有序的桶里,每个桶里的数据再单独进行快速排序。每个桶内都排序完成后,再加上本身桶之间已经是有序的,那么按照桶的顺序依次取出每个桶内的数据,最终组成的序列就是有序的。桶排序的时间复杂度分析:假如排序数组的元素个数为n,均匀分布在个数为m的桶中,那么每...
2019-08-26 14:05:36
13827
2
原创 在O(n)的时间复杂度内查找第K大的元素
这道题目其实是快速排序算法的一个延伸,如何做到在O(n)的时间复杂度内查找数组内第K大的元素?学习过快速排序就知道,快排每次分区会把数据分为三个部分,a[0,p-1],a[p]以及a[p+1,n-1]三个区间。每次分区我们都将大于分区点元素放置在分区元素左边,小于分区元素的统一放到分区元素右边,那么这样一来,我们就可以利用快速排序实现从大到小的数组排序了。但是,这里说这个不是为了排序,而是想说...
2019-08-24 23:58:51
830
原创 排序算法-快速排序的时间复杂度分析
快速排序的思想是在数组[p,r]中选择一个分区点q,将数组一分为2,同时将小于分区点的数值的放到分区点左侧[p,q-1],大于分区点的数值的放到分区点右侧[q+1,r],重复这个过程。快速排序也是用到了分治思想和递归实现方式,这一点跟归并排序是一样的,但是快速排序的实现跟归并是完全不一样的。归并排序是先分解再合并,从下到上解决问题。快速排序是从上到下进行分区实现排序。俯视这个过程像是层...
2019-08-23 23:36:45
8776
原创 排序算法-选择排序的时间复杂度分析
选择排序思想跟插入排序很像,也将数组分为未排序区间和已排序区间。不同的是,选择排序是将未排序区间中选择一个最小值放在已排序区间的后边。跟插入排序不同,不需要不停往后移动数据,选择排序直接替换最小值到指定位置即可。代码也很简单: /** * 选择排序 * @param a * @param n */ public static void ...
2019-08-22 20:29:59
7835
原创 排序算法-插入排序的时间复杂度分析
插入排序的原理是,将数组分为已排序区间和未排序区间两部分,从未排序区间中依次取元素跟已排序区间的元素一一对比,找到适合插入的位置。对于任何数据结构和算法的学习,要充分理解数据结构本身的特点以及熟练数据结构的各种操作(比较、移动方式等)
2019-08-22 18:07:44
21607
原创 排序算法-冒泡排序的时间复杂度分析
冒泡排序算法是一种基于比较的排序算法,每次冒泡过程,都会有一个数据确定位置。经过n次冒泡后,就有n个数据确定了位置。如图所示,对数组[4,5,6,3,2,1]进行冒泡排序。起初,按照最原始的想法,代码是这样写:/** * 冒泡排序算法 * @param arr * @param n */ public static void bub...
2019-08-22 16:27:40
29264
原创 求众数
求众数的方法有很多,这里主要说明的是暴力破解法和hash表两种方法来实现。什么是求众数?在leetCode上169题有这个定义。给定一个大小为 n 的数组,找到其中的众数。众数是指在数组中出现次数大于⌊ n/2 ⌋的元素。你可以假设数组是非空的,并且给定的数组总是存在众数。示例1:输入: [3,2,3]输出: 3示例2:输入: [2,2,1,1,1,2,2]...
2019-08-22 10:21:03
1362
原创 三数之和(Three Sum)
取自leetCode第15题,三数之和。给定一个包含 n 个整数的数组nums,判断nums中是否存在三个元素 a,b,c ,使得a + b + c = 0 ?找出所有满足条件且不重复的三元组。注意:答案中不可以包含重复的三元组。例如, 给定数组 nums = [-1, 0, 1, 2, -1, -4],满足要求的三元组集合为:[ [-1, 0, 1], [-1...
2019-08-21 23:58:45
1257
windows下配置zk伪集群及加入windows服务
2018-02-09
画画板软件.zip
2019-07-08
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅