zoukankan      html  css  js  c++  java
  • 求解重叠区域线段覆盖总长度_求线段总长度_线段覆盖长度

    总结了网上目前流传的两种方法,并写出了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年字节跳动前端面试题

  • 相关阅读:
    数学图形(1.12) 螺线
    数学图形(1.11) 玫瑰线
    数学图形(1.10) 双曲线
    数学图形(1.9)悬链线
    数学图形(1.8) 圆外旋轮线
    git 冲突解决
    Nginx配置文件(nginx.conf)配置详解
    【LNMP】提示Nginx PHP “No input file specified”错误的解决办法
    Windows如何压缩tar.gz格式
    LNMP安装目录及配置文件
  • 原文地址:https://www.cnblogs.com/lyzz1314/p/15495847.html
Copyright © 2011-2022 走看看