
算法
文章平均质量分 61
神奇的小丢丢
所谓软件开发就是用计算机思维去想事情,然后记下来就行了
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
二叉查找树(Binary Search Tree)
二叉查找树(英语:Binary Search Tree),也称二叉搜索树、有序二叉树(英语:ordered binary tree),排序二叉树(英语:sorted binary tree),是指一棵空树或者具有下列性质的二叉树: 若任意节点的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若任意节点的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 任意节原创 2017-07-19 11:07:25 · 866 阅读 · 0 评论 -
两个有序数组合并为一个有序数组
把两个有序数组合并为一个有序数组,例如: 数组A:1,2,2,3,5,6,7,7 数组B:1,2,4,5,8,8,9,10,11,12,12,13,14 合并后应该为: 1, 1, 2, 2, 2, 3, 4, 5, 5, 6, 7, 7, 8, 8, 9, 10, 11, 12, 12, 13, 14 以下是示例代码: public void mergeA原创 2017-07-18 18:24:33 · 1646 阅读 · 0 评论 -
最大连续子数组和
输入一个整形数组,数组里有正数也有负数。数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。 求所有子数组的和的最大值,要求时间复杂度为O(n)。例如输入的数组为1, -2, 3, 10, -4, 7, 2, -5,和最大的子数组为3, 10, -4, 7, 2, 因此输出为该子数组的和18。public void MaxSubArray(){ int[] a = {1, -2原创 2017-07-18 18:09:06 · 415 阅读 · 0 评论 -
数对之差的最大值
数组中某数字减去其右边的某数字得到一个数对之差,求所有数对之差的最大值,注意,算法的时间复杂度必须小于O(N2{^2})。 提示:是可以做到O(NlogN)的例如: 数组{ 2,4,1,17,7,5,11,9,3,9,1,18,4,4 }中,数对之差的最大值是16(17-1) 可能我们会想这个问题很简单嘛,就是轮询去找最大值和最小值,然后相减不就是数对之差最大值了吗!其实完全不是,你怎么能确原创 2017-07-18 16:17:24 · 1332 阅读 · 0 评论 -
Big O notation大零符合 入门讲解
Big O notation大零符号一般用于描述算法的复杂程度,比如执行的时间或占用内存(磁盘)的空间等,特指最坏时的情形。 Linus Torvalds说过“Talking is cheap, show me the code.”,那我们直接从代码(Python)上来学习Big O吧。 O(1) def isFirstElementNull(elements, value): r原创 2017-07-11 21:04:44 · 17597 阅读 · 0 评论 -
使用 LinkedHashMap 实现 LRU 算法
LRU是Least Recently Used 的缩写,翻译过来就是“最近最少使用”,LRU缓存就是使用这种原理实现,简单的说就是缓存一定量的数据,当超过设定的阈值时就把一些过期的数据删除掉,比如我们缓存10000条数据,当数据小于10000时可以随意添加,当超过10000时就需要把新的数据添加进来,同时要把过期数据删除,以确保我们最大缓存10000条。 LinkedHashMap自身已经实现了LR原创 2017-07-20 15:38:42 · 507 阅读 · 0 评论 -
【坐在马桶上看算法】算法12:堆——神奇的优先队列(下)
这位朋友写的特别好,忍不住转发 :-) http://ahalei.blog.51cto.com/4767671/1427156 接着上一Pa说。就是如何建立这个堆呢。可以从空的堆开始,然后依次往堆中插入每一个元素,直到所有数都被插入(转移到堆中为止)。因为插入第i个元素的所用的时间是O(log i),所以插入所有元素的整体时间复杂度是O(NlogN),代码如下。 其实我们还有更快得方转载 2017-07-17 15:28:28 · 645 阅读 · 0 评论 -
【坐在马桶上看算法】算法11:堆——神奇的优先队列(上)
这位朋友写的特别好,忍不住转发 :-) http://ahalei.blog.51cto.com/4767671/1425314堆是什么?是一种特殊的完全二叉树,就像下面这棵树一样。有没有发现这棵二叉树有一个特点,就是所有父结点都比子结点要小(注意:圆圈里面的数是值,圆圈上面的数是这个结点的编号,此规定仅适用于本节)。符合这样特点的完全二叉树我们称为最小堆。反之,如果所有父结点都比子结点要大,这转载 2017-07-17 13:38:04 · 536 阅读 · 0 评论 -
【坐在马桶上看算法】算法10:二叉树
这位朋友写的特别好,忍不住转发 :-) http://ahalei.blog.51cto.com/4767671/1414035 二叉树是一种特殊的树。二叉树的特点是每个结点最多有两个儿子,左边的叫做左儿子,右边的叫做右儿子,或者说每个结点最多有两棵子树。更加严格的递归定义是:二叉树要么为空,要么由根结点、左子树和右子树组成,而左子树和右子树分别是一棵二叉树。 下面这棵树就是一棵二叉树。二叉转载 2017-07-17 11:16:56 · 496 阅读 · 0 评论 -
Dynamic Programming动态规划之收集苹果
动态规划(英语:Dynamic programming,简称DP)是一种在数学、管理科学、计算机科学、经济学和生物信息学中使用的,通过把原问题分解为相对简单的子问题的方式求解复杂问题的方法。 动态规划常常适用于有重叠子问题[1]和最优子结构性质的问题,动态规划方法所耗时间往往远少于朴素解法。 动态规划背后的基本思想非常简单。大致上,若要解一个给定问题,我们需要解其不同部分(即子问题),再合并子问题原创 2017-07-17 10:49:42 · 677 阅读 · 0 评论 -
是否字符串A包含字符串B的所有字母(区分大小写,算个数,不算顺序)
是否字符串A包含字符串B的所有字母(个数也算),比如: 举例说明 字符串A:aaabcdefgamm 字符串B:mama 比较结果:A包含B,因为A有两个a和两个m(A有4个a,但两个就够了)。 字符串A:aaabcdefga 字符串B:mama 比较结果:A不包含B,因为A没有m。 字符串A:aaabcdefgm 字符串B:ma原创 2017-07-14 09:36:59 · 1369 阅读 · 0 评论