当前位置: 首页 > article >正文

力扣850.矩形面积 II

力扣850.矩形面积 II

  • 扫描线

    • 在这里插入图片描述

    • 将所有给定的矩形的左右端点提取出来并排序(每一条红线代表一个端点)

    • 转化为子问题:求两条线卡住的矩形面积

    • 遍历所有给定的矩形,在两条线之间的合并,取最大长度

  •   class Solution {
          const int N = 1e9+7;
      public:
          int rectangleArea(vector<vector<int>>& rectangles) {
              vector<int> lines;
              //所有x入队
              for(vector<int> &v:rectangles)
              {
                  lines.emplace_back(v[0]);
                  lines.emplace_back(v[2]);
              }
              ranges::sort(lines);
              int res=0;
              //遍历每两条线
              for(int i=1;i<lines.size();i++)
              {
                  int l = lines[i-1],r = lines[i];
                  if(l == r) continue;
                  //存这两条线之间的矩形上下边坐标
                  vector<pair<int,int>> edges;
                  for(vector<int> &v:rectangles)
                      //被包含在两条线之间了
                      if(v[0] <= l && v[2] >= r) edges.push_back({v[1],v[3]});
                  //按下端排序
                  ranges::sort(edges);
                  int up = -1,down = -1;
                  long long len = 0;
                  for(pair<int,int> &p:edges)
                  {
                      //尾大于原来的头
                      if(p.first > up)
                      {
                          //把前一段先加上
                          len += up - down;
                          //更新成后一段
                          down = p.first;
                          up = p.second;
                      }
                      //新的头更优
                      else if(p.second > up) up = p.second;
                  }
                  //把当前段加上
                  len += up - down;
                  //长乘宽求得面积
                  len *= r - l;
                  len %= N;
                  res = (res + len) % N;
              }
              return res;
          }
      };
    

http://www.kler.cn/a/282149.html

相关文章:

  • Uniapp 引入 Android aar 包 和 Android 离线打包
  • MySQL技巧之跨服务器数据查询:基础篇-A数据库与B数据库查询合并--封装到存储过程中
  • 使用Python和BeautifulSoup进行网页抓取:通过Python编程语言,结合BeautifulSoup库,可以轻松地从网站上抓取所需的信息。
  • 安全见闻(完整版)
  • C语言剖析:srand()/rand()/time()
  • 爬取链家二手房房价数据存入mongodb并进行分析
  • Python的requests库详细介绍
  • 【持续更新】Mχ Plaayer Pro 1.86.0安卓知名播放器最新免费高级修改版
  • 深入浅出LangChain:从模型调用到Agents开发的全流程指南
  • 【React】跨域问题详解及解决方案
  • 手机三网状态实时查询分享
  • 软件设计模式 - 汇总
  • MyBatis的学习————下篇
  • SQL部分一
  • 【Docker】Docker学习01 | 什么是docker?
  • 【给女朋友讲C++】C++的调试之gdb
  • Wordpress 6.x 修改文件上传大小限制
  • 数学建模---论文写作
  • C# 数组,List,Stack,Dictionary,Queue,LinkedList 如何选择
  • java图片转pdf
  • electron 两个渲染进程之间通信
  • 16. TreeMap和HashMap的区别是什么?在什么场景下应该使用TreeMap?
  • Axure 9 使用
  • 掌握MySQL就差这一个——超详细讲解Mysql集群技术(包含主从复制,半同步模式,组复制,MHA)
  • EmguCV学习笔记 C# 6.S 特别示例
  • 【CVPR‘24】BP-Net:用于深度补全的双边传播网络,新 SOTA!