算法基础之区间选点

区间选点

  • 核心思想: 贪心

    • 每次只看当前的最优解

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

相关推荐
明洞日记4 分钟前
【数据结构手册001】从零构建程序世界的基石
数据结构·c++
冉佳驹11 分钟前
C++ ——— 基本特性解析
c++·引用·内联函数·范围for·命名空间·缺省参数·auto
爱学习的小邓同学11 分钟前
C++ --- 继承
开发语言·c++
xlq2232236 分钟前
18.Stack——queue(上)
开发语言·c++
稚辉君.MCA_P8_Java41 分钟前
DeepSeek Java 插入排序实现
java·后端·算法·架构·排序算法
池塘的蜗牛1 小时前
NR系统相位补偿的原因与原理
算法
重启的码农1 小时前
enet源码解析(5)事件驱动服务 (Event Service)
c++·网络协议
Elias不吃糖1 小时前
SQL 注入与 Redis 缓存问题总结
c++·redis·sql
重启的码农1 小时前
enet源码解析(6)协议处理逻辑 (Protocol Processing)
c++·网络协议
树在风中摇曳1 小时前
链表五大经典面试题详解:双指针与基础操作实战
数据结构·链表