专栏首页趣谈前端javascript算法学习打卡(第一周)

javascript算法学习打卡(第一周)

之前因为工作原因接触了很多有意思的算法知识,为了巩固大家的算法基础和编程能力,笔者将开展为期2个月的算法学习打卡, 每周3-5次算法训练, 并附有算法题的答案, 供大家学习参考. 接下来我们复盘第一周的算法打卡内容.

1.有一个数组arr = [a1, a2, a3, b1, b2, b3, c1, c2, c3...], 通过算法将数组进行拆分, 转化为如下格式的数组a1, b1, c1], [a2, b2, c2], [a3, b3, c3]并实现通用公式

参考答案:

/**
 * arr 待排序数组
 * result 计算的结果数组
 */
function rangeArr(arr = [], result = []) {
  arr.forEach(item => {
    let i = /\d*$/.exec(item)[0]
    result[i] ? result[i].push(item) : (result[i] = [item])
  })
  return result.filter(Boolean)
}

网友优质答案:

2.假设集合A={a, b},集合B={0, 1, 2},则两个集合的笛卡尔积为{(a, 0), (a, 1), (a, 2), (b, 0), (b, 1), (b, 2)}。求当A={a, b, ..., n}, B={0, 1, 2, ..., n}时的笛卡尔积.

笛卡尔乘积是指在数学中,两个集合X和Y的笛卡尓积,又称直积,表示为X × Y,第一个对象是X的成员而第二个对象是Y的所有可能有序对的其中一个成员 。

参考答案:

/*
 * @Author: Mr Jiang.Xu
 * @Date: 2019-08-31 00:05:33
 * @Last Modified by:   Mr Jiang.Xu
 * @Last Modified time: 2019-08-31 00:05:33
 */
function cartesian(arr) {
  if (arr.length < 2) return arr[0] || [];
  return [].reduce.call(arr, function (col, set) {
    let res = [];
    col.forEach(c => {
        set.forEach(s => {
          let t = [].concat(Array.isArray(c) ? c : [c]);
          t.push(s);
          res.push(t);
        })
    });
    return res;
  });
}

3.原生js实现一个Set数据类型, 并实现集合的差集, 并集, 补集, 交集

// 创建集合,并实现交集,差集,补集,并集
function MySet() {
  let items = {}
  // 判断值是否存在
  this.has = function(val) {
    return val in items
  }
  // 添加
  this.add = function(val) {
    if(!this.has(val)) {
      items[val] = val
      return true
    }
    return false
  }
  // 移除
  this.remove = function(val) {
    if(this.has(val)) {
      delete items[val]
      return true
    }
    return false
  }
  // 清空
  this.clear = function() {
    items = {}
  }
  // 大小
  this.size = function() {
    return Object.keys(items).length
  }
  // 取值
  this.values = function() {
    return Object.keys(items)
  }
  // 并集
  this.union = function(otherSet) {
    let unionSet = new Set()
    let values = this.values()
    for(let i=0; i < values.length; i++) {
      unionSet.add(values[i])
    }

    values = otherSet.values()
    for(let i=0; i < values.length; i++) {
      unionSet.add(values[i])
    }

    return unionSet
  }
  // 交集
  this.intersection = function(otherSet) {
    let intersectionSet = new Set()
    let values = this.values()
    for(let i=0; i<values.length; i++) {
      if(otherSet.has(values[i])) {
        intersectionSet.add(values[i])
      }
    }
    return intersectionSet
  }
  // 差集
  this.difference = function(otherSet) {
    let differenceSet = new Set()
    let values = this.values()
    for(let i = 0; i < values.length; i++) {
      if(!otherSet.has(values[i])) {
        differenceSet.add(values[i])
      }
    }
    return differenceSet
  }
  // 子集
  this.subset = function(otherSet) {
    if(this.size() > otherSet.size()) {
      return false
    }else {
      let values = this.values()
      for(let i=0; i<values.length; i++) {
        if(!otherSet.has(values[i])) {
          return false
        }
      }
      return true
    }
  }
}

其他优质答案:

最后

接下笔者将会继续带着大家每周进行算法学习打卡, 并持续推出以实战为主大前端知识技能探索和实践. 赶紧一起学习吧~

本文分享自微信公众号 - 趣谈前端(beautifulFront),作者:徐小夕

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-05-19

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 让你瞬间提高工作效率的常用js函数汇总(持续更新)

    本文总结了项目开发过程中常用的js函数和正则,意在提高大家平时的开发效率,具体内容如下:

    徐小夕
  • 让你瞬间提高工作效率的常用js函数汇总(持续更新)

    本文总结了项目开发过程中常用的js函数和正则,意在提高大家平时的开发效率,具体内容如下:

    徐小夕
  • 手把手教你撸一个能生成抖音风格动图的gif制作平台

    又到了一周一次的周总结, 笔者基于之前的开源项目 blink , 开发了一款能在线配置故障艺术, 并一键生成gif动图的平台, 这里暂时取名为QT. 接下来笔者...

    徐小夕
  • HTML文件里的!Doctype有什么作用?

    事情起因于,我发现有<!DOCTYPE html>的网页和没有的,页面展示的header差了2px。调试了css好久的也解决不了。偶然间删除了doctype结...

    公众号php_pachong
  • 来谈谈Java的深浅拷贝吧

    张风捷特烈
  • Git/SourceTree·查看单个文件提交记录

    陈满iOS
  • 从0到1实现一个Android路由(6)——拦截请求再跳转

    在从0到1实现一个Android路由(2)——URL解析器中,提到过请求拦截,其中有个常见的场景是某个页面是需要登录状态的,那么首先要调到登录页,完成了登录之后...

    用户1108631
  • 谷歌发布Objectron数据集,推进三维物体几何理解的极限

    机器学习(ML)的最新技术已经在许多计算机视觉任务上取得了SOTA的结果,但仅仅是通过在2D照片上训练模型而已。

    代码医生工作室
  • 微信小程序开发指引

    官方文档教程1:http://bcoder.cn/wxopen/ 官方文档教程2:http://bing.aliaii.com/wxopen/  本文档将带你一...

    用户1220053
  • CA证书(数字证书的原理)

    加密:通过加密算法和公钥对内容(或者说明文)进行加密,得到密文。加密过程需要用到公钥。

    Centy Zhao

扫码关注云+社区

领取腾讯云代金券