算法基础之区间选点

区间选点

  • 核心思想: 贪心

    • 每次只看当前的最优解

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

相关推荐
White_Can4 分钟前
《C++11:列表初始化》
c语言·开发语言·c++·vscode·stl
黛色正浓5 分钟前
leetCode-热题100-子串合集(JavaScript)
javascript·算法·leetcode
White_Can13 分钟前
《C++11:右值引用与移动语义》
开发语言·c++·stl·c++11
Z1Jxxx18 分钟前
字符串翻转
开发语言·c++·算法
闻缺陷则喜何志丹19 分钟前
【前缀和 期望】P7875 「SWTR-7」IOI 2077|普及+
c++·算法·前缀和·洛谷·期望
CSDN_RTKLIB29 分钟前
ODR、linkage问题解惑
开发语言·c++
CoovallyAIHub33 分钟前
超越Sora的开源思路:如何用预训练组件高效训练你的视频扩散模型?(附训练代码)
深度学习·算法·计算机视觉
宵时待雨36 分钟前
数据结构(初阶)笔记归纳1:复杂度讲解
c语言·数据结构·笔记
源来猿往41 分钟前
yolov8n结构化剪枝
算法·yolo·剪枝
非得登录才能看吗?1 小时前
C++多线程简单版(C++11 及以上)
c++