算法基础之区间选点

区间选点

  • 核心思想: 贪心

    • 每次只看当前的最优解

      • 将所有区间按右端点排序 从小到大遍历所有区间
      • 为了覆盖更多区间 取右端点作为选点
      • 若两区间互相没有交集 则再取点
    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;
      }

相关推荐
程序员二叉1 分钟前
【JUC】线程池全套深度详解|参数|流程|拒绝策略|调优|异常处理
java·开发语言·jvm·算法·面试·juc
青山木16 分钟前
Hot 100 --- 轮转数组
java·数据结构·算法
徐小夕41 分钟前
Loop Engineering 深度解析与实战指南(全网最全)
前端·算法·github
凡人叶枫1 小时前
Effective C++ 条款22:将成员变量声明为 private
linux·开发语言·c++
北域码匠2 小时前
SHA-1算法:安全哈希原理与应用解析
算法·c#·哈希算法
坚果派·白晓明2 小时前
【鸿蒙PC】SDL3 移植:AtomCode Skills 4 步速通多媒体库适配
c++·华为·ai编程·harmonyos·atomcode·c/c++三方库
手写码匠2 小时前
手写 GraphRAG:从零实现图增强检索增强生成系统
人工智能·深度学习·算法·aigc
BomanGe13 小时前
NSK重载高刚性滚珠丝杠技术详解
经验分享·算法·规格说明书
赴生-3 小时前
C++进阶 C++11(下)
开发语言·c++
有点。3 小时前
C++(贪心算法一)
c++·贪心算法