常用算法
文甜心
这个作者很懒,什么都没留下…
展开
-
插入排序多种实现
思想:arr,i=1,len=arr.length,flag=arr[i]; 第一趟,比较flag与arr[0]的大小,若flag > arr[0],另arr[i++] = flag;否则, arr[0]右移(arr[i] = arr[0])后另arr[0] = flag; i++进行下一趟排序。 第二趟,flag与前两个元素进行比较,在合适位置插入。 … 依次进行上述插入,直至排序原创 2017-04-04 14:42:29 · 348 阅读 · 0 评论 -
归并排序
归并排序是分治思想的一种实现。function mergeSort(arr){ if(arr.length <= 1) return arr; var mid = Math.floor(arr.length/2); var leftArr = arr.slice(0, mid); var rightArr = arr.slice(mid); return me原创 2017-09-22 23:36:55 · 298 阅读 · 0 评论 -
旋转数组中的最小数字
把一个递增排序数组的前几个元素移动至末尾,找出最小的数字。 例如: [3,4,5,1,2]就是数组[1,2,3,4,5]的旋转。找出1。function Minnum(arr){ if(!Array.isArray(arr) || arr.length <= 1) { return arr; } var left = 0,原创 2017-08-08 23:39:11 · 200 阅读 · 0 评论 -
背包问题
完全背包问题function getMaxGold(n,w,g,p){ var nextGold, results = []; for(var i = 0; i <= w; i++){ results[i] = (i < p[0]) ? 0 : g[0]; }原创 2017-07-31 23:45:46 · 201 阅读 · 0 评论 -
最小支撑(生成)树的prim算法 java
package prim;import java.util.*;public class Prim { static int MAX = Integer.MAX_VALUE; public static void main(String[] args) { int[][] map = new int[][] {原创 2017-06-25 15:39:17 · 322 阅读 · 0 评论 -
求数组子数组之和的最大值
方法:最简单的方法就是把所有子数组遍历一遍求和找最大值。 显然有更好的方法。 我们考虑长为N的一个数组arr的最后一个元素arr[N-1]与前N-1项的和最大连续子数组的关系,有三种情况: 1、等于arr[N-1] eg:[1,-3,5] 2、以arr[N-1]结尾 eg:[2,-1,5] 3、与arr[N-1]无关 eg:[5,-3,2]function maxChildArr(原创 2017-06-24 17:34:44 · 548 阅读 · 0 评论 -
快速排序的多种实现(一)
原始快排,嘻嘻! 第一趟,flag = arr[0],len = arr.length,i = 1,j = len-1; 从arr[j]开始,找到第一个小于flag的数组元素(否 则另j–),将其传给arr[0],同时,记下j的位置; 然后从arr[i]开始,找到第一个大于flag的数组元素(否则另i++),然后另arr[j] = arr[i],记下i的位置。 … 重复以上步骤,原创 2017-04-04 00:14:13 · 374 阅读 · 0 评论 -
H5离线缓存
H5的离线缓存,主要有两个方面,一方面是在meta中设置manifest属性来告知浏览器进行缓存,另一方面就是使用localStorage。一、使用manifest1、介绍 manifest是一个后缀名为.manifest的文件,从文件中定义需要缓存的文件,支持manifest的浏览器,会按照manifest的规则,将文件保存到本地,在没有网络连接的情况下,也能访问页面。 当我们原创 2017-06-16 20:18:21 · 663 阅读 · 0 评论 -
快排的递归与非递归实现(二)
我们首先将之前快排的代码进行一个拆解,将分段函数独立出来,主要是为了我们可以很方便的理解递归的过程,从而通过堆栈来模拟递归,实现快速排序的非递归实现。 拆解出partition函数: function partition(arr, start, end) { var flag = arr[start]; while (start < end) {原创 2017-04-04 01:27:59 · 686 阅读 · 0 评论 -
堆排的实现
思想比较简单,先建立大顶堆或者小顶堆,然后将堆顶元素与最后一个元素交换,然后再以剩下的n-1个元素通过调整建立大(小)顶堆,依次交换直至最后堆中元素只有一个。完成排序。 js实现如下: //heapSort function heapAdjust(arr, i, len) { var child, idx = i; for (;原创 2017-04-09 13:17:02 · 263 阅读 · 0 评论 -
JS中由先序遍历和中须遍历构造二叉树
1、首先是利用构造函数创建一个二叉树的的数据结构 (注意:在js中没有{1,2,3}这样的变量,故使用数组)function TreeNode(x) { this.val = x; this.left = null; this.right = null; }2、先分析,二叉树先序遍历,即第一个元素为根节点,在中序遍历中,根节点之前的所有元素为原创 2017-03-18 11:35:12 · 1120 阅读 · 0 评论 -
动态规划:最大上升子序列
一个数的序列bi,当b1 < b2 < … < bS的时候,我们称这个序列是上升的。对于给定的一个序列(a1, a2, …,aN),我们可以得到一些上升的子序列(ai1, ai2, …, aiK),这里1 <= i1 < i2 < … < iK <=N。 比如,对于序列(1, 7, 3, 5, 9, 4, 8),有它的一些上升子序列,如(1, 7), (3, 4, 8)等等。这些子序列中最长的原创 2017-04-03 19:35:10 · 302 阅读 · 0 评论 -
深拷贝与浅拷贝实现(参考jquery)
var toString = [].toString, hasOwn = Object.prototype.hasOwnProperty;var types = { '[object Boolean]':'bool', '[object Number]' : 'number', '[object String]' : 'string', '[原创 2017-09-21 23:13:06 · 342 阅读 · 0 评论