• 求解重叠区域线段覆盖总长度_求线段总长度_线段覆盖长度


    总结了网上目前流传的两种方法,并写出了javascript版本:

    let e1 = [
      [2, 4],
      // [0, 19],
      [3, 8],
      [10, 12]
    ]
    
    // 解法1. 排序后扫描(机器思维)
    let totalLength1 = function (fragments) {
      let res = 0
    
      // sort by start number
      let sorted = fragments.sort((a, b) => a[0] - b[0])
      let start = sorted[0][0]
      let end = sorted[0][1]
    
      for (let i = 1; i < sorted.length; i++) {
        let value = sorted[i]
    
        // Pseudo code:
        // if hasIntersection-> (end > value[0]) then 更新end值 loop until notIntersection
        // else update start end value
    
        while (end > value[0]) { // 一看到while循环,就要想到,每个循环内必须手动更新变量
          end = value[1] > end ? value[1] : end
    
          i++
          if (i >= sorted.length) break
          value = sorted[i]
        }
        // accumulation
        res += (end - start)
        // update start && end value
        start = value[0]
        end = value[1]
        // 这个时候i表示的是下一个值的索引(下一个值因为没有达到while条件被弹出了),下一个遍历因为会++,所以这里要--
        i--
      }
      return res
    }
    // 解法2. 像素化(不考虑空间开销)
    let totalLength2 = function (fragments) {
      let flat = fragments.flat(1)
    
      let min = Math.min(...flat)
      let max = Math.max(...flat)
      let length = max - min
      let pixelArray = Array(length).fill(false)
    
      for (let item of fragments) {
        console.log(item)
        for (let i = item[0] - min; i < item[1] - min; i++) {
          pixelArray[i] = true
        }
      }
      console.log(pixelArray)
    
      return pixelArray.filter(item => item == true).length
    }
    // test
    let res = totalLength1(e1)
    console.log(res)
    
    

    这道题是2022年字节跳动前端面试题

  • 相关阅读:
    Python之文件操作
    document.hasFocus() & $(window).blur()
    innerHtml 会忽略里面元素的属性
    ng  命令集合
    阿里云ECS CentOs7.3下搭建LAMP环境(Apache2.4 + Mysql5.7 + PHP5.6 + Laravel5.2)
    在忘记root密码的时候,可以这样 亲测可用
    下一次装mysql 试一下这个方法
    CentOS-6.8安装Mysql-5.5.29
    阿里云服务器下安装LAMP环境(CentOS Linux 6.3)
    CentOS 7.2 配置Apache服务(httpd)--上篇
  • 原文地址:https://www.cnblogs.com/lyzz1314/p/15495847.html
Copyright © 2020-2023  润新知