算法基础之区间选点

区间选点

  • 核心思想: 贪心

    • 每次只看当前的最优解

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

​

相关推荐
Rain的Java大神之路14 分钟前
面了上百人,我最爱问的LeetCode 1「两数之和」:能背代码的很多,能讲清“先查后存”的没几个
java·后端·算法
程序猿编码31 分钟前
不用 PyTorch!从零手写 C++ 深度学习框架,自动微分、CUDA、分布式一把搞定
c++·深度学习·大模型推理·自动微分
real_metrix32 分钟前
【学习笔记】C/C++ 头文件自包含
c++·c·头文件·自包含
Ivanqhz34 分钟前
超参数考量与设计
数据库·人工智能·深度学习·算法·机器学习
雪落漂泊34 分钟前
C++算法 滑动窗口篇(上)
开发语言·c++·算法
像枫一样35 分钟前
STM32串口轮询收发实战教程
arm开发·c++·stm32·单片机·嵌入式硬件·fpga开发·51单片机
Soneswy39 分钟前
C++基础篇——类与对象(上)
开发语言·c++
张小姐的猫41 分钟前
【MySQL】表的约束
android·linux·服务器·数据库·c++·mysql·adb
吞下星星的少年·-·43 分钟前
Div.2 CF edu195A题(数学,贪心)
数学·算法·贪心
kiracrimson44 分钟前
STL简单引入:把数据结构做成模板
开发语言·数据结构·c++