Algorithm

  • 前言

    最近举行了一场盛大的前端算法大比拼,题目从真实业务场景中抽取出来,童鞋们纷纷摩拳擦掌展示自己算法基本功。题目如下:

    img

    真实场景里面,有7M左右的JSON数据需要统一更新费率,据说一开始处理这堆数据一次就得耗费20+秒。在浏览器场景下,这意味着这段时间UI渲染被阻塞,用户交互完全无响应。最后经过调整的算法,也需要1秒左右的执行时间,非常影响用户体验。

    略懂浏览器动画的童鞋都知道,在浏览器一帧里面layout、合成、渲染占据了不少CPU时间,真实交给js进行运行的时间只有不到10ms。在如此大数据量处理的场景下要保持丝般顺滑的用户体验,算法必不可少,可见算法对于前端依旧非常重要。

    鄙人也参加

  • 题目

    创建一个函数,接受两个或多个数组,返回所给数组的 对等差分(symmetric difference) (△ or ⊕)数组.

    给出两个集合 (如集合 A = {1, 2, 3} 和集合 B = {2, 3, 4}), 而数学术语 "对等差分" 的集合就是指由所有只在两个集合其中之一的元素组成的集合(A △ B = C = {1, 4}). 对于传入的额外集合 (如 D = {2, 3}), 你应该安装前面原则求前两个集合的结果与新集合的对等差分集合 (C △ D = {1, 4} △ {2, 3} = {1, 2, 3, 4}).

    解题思路

    • 使用 Array.prototype.re
  • 本文介绍 JavaScript 的几种从数组中找出最大值的方法。

    使用递归函数

    var arr = [9,8,55,66,49,68,109,55,33,6,2,1];
    var max = arr[0];
    function findMax( i ){
      if( i == arr.length ) return max;
      if( max < arr[i] ) max = arr[i];
      findMax(i+1);
    }
    
    findMax(1);
    console.log(max);
    

    使用 for 循环遍历

    var arr = [9,8,55,66,49,68,109,55,33,6
  • 写在最前

    本次分享一下通过广度优先搜索解决八数码问题并展示其最短路径的动画效果。

    欢迎关注我的博客,不定期更新中——

    效果预览

    该效果为从[[2, 6, 3],[4, 8, 0],[7, 1, 5]] ==> [[[1, 2, 3],[4, 5, 6],[7, 8, 0]]]的效果展示

    2018-01-28 20_50_42

    源码地址

    配置方式如下:

    var option = {
        startNode: [
            [2, 6, 3],
            [4, 8, 0],
            [7, 1, 5]
        ],
        endNode: [
            [1, 2, 3],
            [4

  • 写在最前

    本次分享一下通过广度优先搜索解决八数码问题并展示其最短路径的动画效果。

    欢迎关注我的博客,不定期更新中——

    效果预览

    该效果为从[[2, 6, 3],[4, 8, 0],[7, 1, 5]] ==> [[[1, 2, 3],[4, 5, 6],[7, 8, 0]]]的效果展示

    2018-01-28 20_50_42

    源码地址

    配置方式如下:

    var option = {
        startNode: [
            [2, 6, 3],
            [4, 8, 0],
            [7, 1, 5]
        ],
        endNode: [
            [1, 2, 3],
            [4