算法基础之区间选点

区间选点

  • 核心思想: 贪心

    • 每次只看当前的最优解

      • 将所有区间按右端点排序 从小到大遍历所有区间
      • 为了覆盖更多区间 取右端点作为选点
      • 若两区间互相没有交集 则再取点
    cpp 复制代码
      #include<iostream>
      #include<algorithm>
      
      using namespace std;
      const int N = 100010;
      
      int n;
      struct Range{
          int l,r;
          bool operator< (const Range &W)const{  //重载<
              return r < W.r;
          }
      }range[N];
      
      int main()
      {
          cin>>n;
          for(int i=0;i<n;i++)
          {
              int l,r;
              cin>>l>>r;
              range[i] = {l,r};
              // cin >> range[i].l >> range[i].r; 也可以
          }
          
          sort(range,range+n);
          
          int res = 0,ed = -2e9;  //res为点个数 ed为当前选点的下标
          for(int i=0;i<n;i++)  //遍历所有区间
          {
              if(range[i].l > ed)  //左端点大于上一次取的右端点
              {
                  ed = range[i].r;  //更新右端点
                  res ++;  //个数+1
              }
          }
          
          cout<<res;
      }

相关推荐
草履虫建模11 分钟前
Java 集合框架:接口体系、常用实现、底层结构与选型(含线程安全)
java·数据结构·windows·安全·决策树·kafka·哈希算法
LYS_061818 分钟前
c++学习(1)(编译过程)
c++·学习
特种加菲猫28 分钟前
C++核心语法入门:从命名空间到nullptr的全面解析
开发语言·c++
浮生091936 分钟前
DHUOJ 基础 85 86 87
数据结构·c++·算法
CHANG_THE_WORLD1 小时前
C++指针与引用:从语法到底层的全面剖析
java·数据结构·c++
HAPPY酷1 小时前
Visual Studio C++ 项目“添加现有项“避坑指南
java·c++·visual studio
say_fall1 小时前
双指针算法详解:从原理到实战(含LeetCode经典例题)
算法·leetcode·职场和发展
追随者永远是胜利者1 小时前
(LeetCode-Hot100)33. 搜索旋转排序数组
java·算法·leetcode·职场和发展·go
你怎么知道我是队长1 小时前
计算机系统基础3---值的表示2---定点数与浮点数的介绍
算法
云深处@1 小时前
【数据结构】栈
数据结构·算法