数据结构和算法
(def p [])
这个作者很懒,什么都没留下…
展开
-
js实现java字符串的hashCode方法
java的int类型占4个字节。在计算字符串的hashcode时,可能会溢出。这种溢出属于正常情况。在js中,所有数字都是以64位浮点数形式储存。其表示范围要远远超过java32位的int。所以在js要实现java字符串的hashCode方法,就需要主动让其值产生溢出效果。有什么用呢?更深入理解java字符串的hashCode方法理解数值计算的溢出处理连接js和java字符串处理ja...原创 2019-09-24 23:09:02 · 2453 阅读 · 0 评论 -
leetcode-6. Z字形变换
/** * @param {string} s * @param {number} numRows * @return {string} */var convert = function(s, numRows) { if(numRows==1){ return s; } let chs = [...s]; let res = []; ...原创 2018-09-15 17:53:23 · 153 阅读 · 0 评论 -
leetcode-7. 反转整数
/** * @param {number} x * @return {number} */var reverse = function(x) { let r = 0; let res = []; while(x!=0){ r = x%10; //res = res*10+r; res.push(r); ...原创 2018-08-25 18:16:25 · 146 阅读 · 0 评论 -
leetcode-4. 两个排序数组的中位数
https://leetcode-cn.com/problems/median-of-two-sorted-arrays/description//** * @param {number[]} nums1 * @param {number[]} nums2 * @return {number} */var findMedianSortedArrays = function(num...原创 2018-08-25 12:48:58 · 140 阅读 · 0 评论 -
leetcode-3. 无重复字符的最长子串
/*https://leetcode-cn.com/problems/longest-substring-without-repeating-characters/description/*/var lengthOfLongestSubstring = function(s) { let dict = {}; let begin = 0; let max = 0;...原创 2018-08-25 10:12:02 · 129 阅读 · 0 评论 -
求l的k乘积-回溯算法
let num = '6345214';let K = 4;let res = [];let max = 0;function backtrace(k){ let c = consumed(k); if(k==K){ if(c.length==num.length){ console.info(res); le...原创 2018-08-16 19:54:24 · 742 阅读 · 0 评论 -
八皇后-回溯算法
回溯算法就是穷举法的一种优化。 在对解空间树进行深度优先遍历时,检查条件是否满足,从而舍弃掉很多情况。let n = 8;let cols = [];//第i行放在第cols[i]列。//尝试放置第row行function tryRow(row){ //尝试对每一列进行放置 for(let col=0;col<n;col++){ //判断在第row行第co...原创 2018-08-15 19:30:07 · 200 阅读 · 0 评论 -
O(1) 时间插入、删除和获取随机元素 - 允许重复
/***https://leetcode-cn.com/problems/insert-delete-getrandom-o1-duplicates-allowed/description/设计一个支持在平均 时间复杂度 O(1) 下, 执行以下操作的数据结构。注意: 允许出现重复元素。insert(val):向集合中插入元素 val。remove(val):当 val 存在时,从...原创 2018-08-10 12:14:02 · 918 阅读 · 0 评论 -
二叉平衡树
/**avl树(平衡二叉树,二叉搜索树)http://lib.csdn.net/article/datastructure/9204http://www.cnblogs.com/huangxincheng/archive/2012/07/22/2603956.htmlhttps://www.cnblogs.com/skywang12345/p/3576969.html 父节点的左子树和右...原创 2018-07-21 09:32:14 · 173 阅读 · 0 评论 -
leetcode-8. 字符串转整数 (atoi)
/** * @param {string} str * @return {number} */var myAtoi = function(str) { let max = Math.pow(2,31)-1; let min = -max-1; let reg = /^\s*([-+]?\d+).*$/igm; let arr = reg.exec(str);...原创 2018-09-19 12:37:03 · 237 阅读 · 0 评论 -
leetcode-14. 最长公共前缀
一般求公共前缀可以用trie树解决。但是如果是朴素trie树,则会消耗大量空间,如果是double-array-trie,则编码相当复杂。所以这里就不用trie树,直接用遍历的方式解决。当然还可以用递归等其他方式。/** * @param {string[]} strs * @return {string} */var longestCommonPrefix = function...原创 2018-09-24 19:14:09 · 615 阅读 · 0 评论 -
groovy伪递归优化
groovy伪递归优化1、官网文档闭包这一章介绍了使用trampoline进行伪递归优化def factorialfactorial = { int n, def accu = 1G -> if (n < 2) return accu factorial.trampoline(n - 1, n * accu)}factorial = factorial.tra...原创 2019-09-14 15:53:41 · 382 阅读 · 2 评论 -
基于redis实现限流器
package org.jsirenia.ratelimit;import java.io.FileNotFoundException;import java.util.List;import org.jsirenia.file.MyFile;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.spri...原创 2019-06-12 21:52:47 · 1172 阅读 · 1 评论 -
redis实现队列
package org.jsirenia.queue;import java.util.List;public interface RedisQueue { void clear(); boolean isEmpty(); String peek(); int add(String... source); List<String> peek(int coun...原创 2019-06-12 21:50:42 · 810 阅读 · 0 评论 -
懒初始化的map
package org.jsirenia.defer;import java.util.Map;/*** * 第一次get的时候,调用初始化方法。 * @author zhoujiaping 2019-04-23 * */public class LazyInitMap<K,V>{ private Map<K,V> map; private bool...原创 2019-06-12 21:39:17 · 313 阅读 · 0 评论 -
alibaba-druid里面的LRU缓存实现
内容从druid包里面拷贝的package org.jsirenia.cache;import java.util.LinkedHashMap;import java.util.Map;//copy from com.alibaba.druid.util.LRUCache;public class LRUCache<K, V> extends LinkedHashMap&l...原创 2018-12-05 20:36:34 · 602 阅读 · 0 评论 -
java版js数组
背景:java数组、列表的抽象程度不够,操作起来相对麻烦。相比而言,js数组方便很多。于是参考js的数组api,对java数组(列表)进行抽象,可以非常方便地进行平常的一些操作。依赖:只是在toString方法中依赖了fastjson,所以就不贴pom.xml了。代码:1、接口package org.jsirenia.array;import java.util.Comparato...原创 2018-12-05 20:32:57 · 365 阅读 · 0 评论 -
leetcode-11. 盛最多水的容器
var maxArea = function(height) { let max = Math.min(height[0],height[1]) for(let i=2;i<height.length;i++){ for(let j=0;j<i;j++){ let h = Math.min(height[i],height[j])...原创 2018-09-22 21:07:57 · 187 阅读 · 0 评论 -
leetcode-5.最长回文子串
/** * @param {string} s * @return {string} */var longestPalindrome = function(s) { let chs = [...s]; let res = []; for(let i=0;i<chs.length;i++){ let s1 = f1(chs,i); ...原创 2018-09-15 16:03:00 · 127 阅读 · 0 评论 -
单源最短路径算法-动态规划算法
/*对于权威的floyd方法,个人觉得其实并不好理解。特别是其中的三重循环,并没有很好的描述步骤间的依赖关系。所以自己写了一个递归函数版本的floyd算法。*/let max = Infinity;function newGraph(){ let g1 = { vertexs:['s','2','3','4','5','6','7','t'], ed...原创 2018-07-06 18:07:23 · 4196 阅读 · 0 评论 -
洗牌算法-js实现
/**洗牌算法https://github.com/hanzichi/underscore-analysis/issues/15https://www.h5jun.com/post/array-shuffle.html场景:随机产生100个数字,数字范围1-100,并且它们不重复。*/function shuffle2(arr){//时间复杂度O(nlogn) arr.sor...原创 2018-07-11 23:10:15 · 4124 阅读 · 0 评论 -
十字链表-js实现
/**https://blog.csdn.net/dongyanxia1000/article/details/53584496*/function newAcrosslinker(){ let vs = [];//顶点数组 let al = {//十字链表 vs:vs, /**设置顶点个数*/ setVertexNum(vn)...原创 2018-07-11 23:08:54 · 352 阅读 · 0 评论 -
霍夫曼编码
const {newHeap} = require('./heap');/** * 赫夫曼树 * 这个学信息论的时候学过 * 可以用来实现文件压缩 * http://www.cnblogs.com/huangxincheng/archive/2012/12/09/2809993.html * * 为什么用最小堆而不用其他方式排序?因为我们只需要最小的两个元素,其他元素之间的顺序并不...原创 2018-05-27 23:36:07 · 249 阅读 · 0 评论 -
AC自动机-附带算法推导
/** *http://www.cnblogs.com/huangxincheng/archive/2012/12/02/2798317.html *https://blog.csdn.net/creatorx/article/details/71100840 */const aCode = 'a'.charCodeAt(0);function trans(node){ if(n...原创 2018-05-16 18:29:24 · 215 阅读 · 0 评论 -
nodejs实现bitmap/bitset
代码在github上面有最新版 https://github.com/zhoujiaping/doc/blob/master/nodenode/algol/bitset.js/** * Bitmap算法(java中叫BitSet,作为javascript,还是跟着java老大哥叫bitset吧) * http://www.cnblogs.com/huangxincheng/archive...原创 2018-05-15 22:26:53 · 2282 阅读 · 2 评论 -
nodejs实现线段树
/** * 线段树 * http://www.cnblogs.com/huangxincheng/archive/2012/12/08/2808207.html *//** * 根据数组,以及数组的下标范围创建节点。 */let newNode = function(array,left,right){ if(left == right){ /*left,ri...原创 2018-05-26 01:10:53 · 285 阅读 · 0 评论 -
树状数组(快速求数组的前n项和)
lowbit.js/**lowbit(x)是x的二进制表达式中最低位的1所对应的值。x=x(n)x(n-1)x(n-2)...x(m)...x2x1共n位假设x(m)位为1,小于m的位全为0。那么其反码为y(n)y(n-1)...y(m)...y2y1,y(k)和x(k)互补则y(m)为0,小于m的位全为1。所以其补码为y(n)y(n-1)...1...00 y(m)变成了...原创 2018-05-15 18:29:56 · 708 阅读 · 0 评论 -
kmp算法实现(nodejs版)
/** *kmp算法实现(nodejs版) */function calcNext(word){ let k = -1; let j = 0; let next = []; next[0] = -1; while(j&lt;word.length-1){ if(k==-1 || word[k]==word[j]){ ...原创 2018-05-19 17:59:58 · 244 阅读 · 0 评论 -
trie树
/** * trie树(字典树,前缀树,键树) https://blog.csdn.net/hyman_yx/article/details/54410619 https://blog.csdn.net/jiutianhe/article/details/8076835 朴素trie树,字符集a-z 这种结构,空间复杂度真的恐怖。一般不直接使用,而是使用其优化版本double array...原创 2018-05-19 17:29:48 · 120 阅读 · 0 评论 -
协同推荐SlopeOne 算法
/**协同推荐SlopeOne 算法http://www.cnblogs.com/huangxincheng/archive/2012/11/22/2782647.htmlRb = (n*(Ra-Rab)+m*(Rc-Rcb))/(m+n)a,b,c代表商品Ra代表商品的打分值Rab代表A组到B组的平均差(均值化)m,n代表人数@Param productsScores = [...原创 2018-05-11 19:21:39 · 566 阅读 · 0 评论 -
prim
` /** 最小生成树 prim算法 */ function newGraph(){ let g = { vertexs:[],//顶点集合 edges:[]//,//边的集合。使用邻接矩阵,是一个二维数组。 //edgesNum:0//边的条数 }; g.vertexs = [‘A’,’B’,’C’,’...原创 2018-06-27 08:45:41 · 753 阅读 · 0 评论 -
利用概率思想求近似值
/**http://www.cnblogs.com/huangxincheng/archive/2012/02/14/2350275.html计算定积分:I = ∫01 (1-x2)dx 的值貌似没啥用啊*/function f(x){ return 1-Math.pow(x,2);}function I(start,end,f){ let x = start; ...原创 2018-07-11 23:07:48 · 467 阅读 · 0 评论 -
二叉搜索树-js实现
/**二叉搜索树http://lib.csdn.net/article/datastructure/9204http://www.cnblogs.com/huangxincheng/archive/2012/07/22/2603956.html*/function bst(){ let tree = { root:null, add(value){...原创 2018-07-11 23:06:20 · 407 阅读 · 0 评论 -
floyd
/*https://blog.csdn.net/jeffleo/article/details/53349825*/let max = Infinity;function newGraph(){ return { vertexs:['a','b','c','d','e','f','g'], edges:[ [0,12,max,...原创 2018-07-04 19:50:34 · 231 阅读 · 0 评论 -
dijkstra算法(附带正确性证明)
let max = Infinity;function newGraph(){ return { vertexs:['A','B','C','D','E'], edges:[ [0,5,8,max,max], [5,0,1,3,2], [8,1,0,max,max], ...原创 2018-07-04 12:52:46 · 1564 阅读 · 5 评论 -
并查集
` 实际使用场景: 求图的联通分量,比如求各城市之间互通还要修几条路,比如网络布线时最少还要布几条线防止多布线浪费材料。UF.java public class UF { private int groupCount;//组的个数 private int[] pre;/*下标为节点在list中的索引,值为节点的前导节点的索引(父节点的索引)。 如果值小于0,...原创 2018-06-28 19:25:56 · 206 阅读 · 0 评论 -
prim优化版
` /** 最小生成树 prim算法优化思路: g.vertexs = [{id:’A’,used:false},{id:’B’,used:false},{id:’C’,used:false},{id:’D’,used:false},{id:’E’,used:false},{id:’F’,used:false}]; g.edges = [ heap, heap, heap, ...原创 2018-06-28 19:25:18 · 593 阅读 · 0 评论 -
kruskal算法
` public class KruskalTest { @Test public void test(){ PriorityQueue&amp;lt;Edge&amp;gt; queue = new PriorityQueue&amp;lt;&amp;gt;(); Graph g = Graph.build(); for(Edge e : g.getEdges()){ ...原创 2018-06-27 18:47:56 · 2268 阅读 · 0 评论 -
字符串相似度(编辑距离)
/** * 字符串相似度(编辑距离),比如用在DNA对比。 * http://www.cnblogs.com/huangxincheng/archive/2012/11/11/2765633.html * */const {cache,time} = require('./aop');function minEdit(seqA,seqB){ let lenA = seqA.l...原创 2018-05-11 09:14:23 · 663 阅读 · 0 评论