首页 > 编程语言 >贪心算法-找不重叠的区间段

贪心算法-找不重叠的区间段

时间:2024-09-17 11:45:54浏览次数:1  
标签:10 片段 return 重叠 int 算法 result 贪心

1.说明

有N个区间片段,查找其中不重叠的片段最大个数。例如(6 8),(2 4),(3 5),(1 5),(5 9),(8 10)这6个片段中,不重叠的片段最大个数为3,分别为(2 4),(6 8),(8 10)。

2.解析

先按照起始位置从小到大进行排序,使用贪心算法使有效片段尽可能小,即结束位置更靠前。当前片段如果属于上个有效片段的子段,则上个有效片段无效,被当前片段替代;当前片段如果和上个有效片段不重叠,则记作有效片段。
1.将N个片段按照起始位置从小到大进行排序,(1 5),(2 4),(3 5),(5 9),(6 8),(8 10)。
2.按照上述判断方法遍历这N个片段,找出不重叠的有效字段,如下图所示,分别为"新1"、"新2"、"3"这三个片段。

3.代码实现

int findMostIntervals(vector<vector<int>> intervals, int n) 
{
    if(n==1)
        return 1;
int result=0;
sort(intervals.begin(),intervals.end(),[](vector<int>a,vector<int>b){
    return a[0]<b[0];//按照起始位置从小到大排序
});
int curStart,curEnd=0;
int preStart=intervals[0][0];
int preEnd=intervals[0][1];
result++;//先将第一个片段当作有效片段
auto it=intervals.begin();
for(++it;it!=intervals.end();++it)//从第二个片段开始遍历
{
    curStart=(*it)[0];
    curEnd=(*it)[1];
    //case1
    if(curStart>=preStart && curEnd<=preEnd)
    {
        //巧:更新绝对不可能更坏的结果,因为新的片段结束位置更小
        preStart=curStart;
        preEnd=curEnd;
    }
    //case 2
    else if(curStart>=preEnd) //新的有效片段
    {
        result++;
        preStart=curStart;
        preEnd=curEnd;
    }
}
return result;

}

标签:10,片段,return,重叠,int,算法,result,贪心
From: https://www.cnblogs.com/madadam/p/18416179

相关文章

  • C#数据结构与算法实战入门指南
    前言在编程领域,数据结构与算法是构建高效、可靠和可扩展软件系统的基石。它们对于提升程序性能、优化资源利用以及解决复杂问题具有至关重要的作用。今天大姚分享一些非常不错的C#数据结构与算法实战教程,希望可以帮助到有需要的小伙伴。C#经典十大排序算法主要讲解C#经典......
  • 【多变量输入单步预测】基于霜冰优化算法(RIME)优化CNN-BiLSTM-Attention的风电功率预
             ......
  • 数据结构与算法(四)线性表的抽象数据类型描述
    一、回顾    上一篇我们讲到了线性表的定义,讲到了所谓抽象数据类型就是把数据类型和操作捆版在一起。那么我们接下来分析一下,线性表应该有什么样的相关操作呢?。    从一个例子来看一看,回到我们上一篇开学参加升旗仪式的例子:    老师把同学们按照规......
  • 基于改进多目标灰狼优化算法的考虑V2G技术的风、光、荷、储微网多目标日前优化调度研
    ......
  • 机器学习中的 K-均值聚类算法及其优缺点。
    K-均值聚类算法是一种常用的无监督学习算法,用于将数据集划分为K个不重叠的簇。算法的过程通常分为以下几步:随机选择K个点作为初始聚类中心。对数据集中的每个数据点,计算其与每个聚类中心的距离,并将数据点分配给距离最近的聚类中心所属的簇。更新每个簇的聚类中心,即将簇内所......
  • 代码随想录算法 - 二叉树7
    题目1669.修剪二叉搜索树给你二叉搜索树的根节点root,同时给定最小边界low和最大边界high。通过修剪二叉搜索树,使得所有节点的值在[low,high]中。修剪树不应该改变保留在树中的元素的相对结构(即,如果没有被移除,原有的父代子代关系都应当保留)。可以证明,存在唯一的答案......
  • Java算法总结
    文章目录一、链表相关1.1从尾到头打印单链表[要求方式1:反向遍历。方式2:Stack栈]1.2josephu问题(使用带尾指针的循环链表)二、动态规划2.1斐波那契数列2022.4.182.2青蛙上台阶2022.4.18三、位运算符3.1二进制中1的个数2022.4.18四、回溯算法4.1打印从1到最大的......
  • 九、并查集-算法总结
    文章目录九、并查集9.1简介9.2数据结构9.2.1初始化9.2.2Quick-Find9.2.3Quick-Union9.2.4WeightedQuickUnion九、并查集9.1简介并查集用于处理不相交集合的合并与查询问题,常见操作有:查询:查询元素属于哪个集合,可用于判断元素是否在一个集合中合并:合并两......
  • 常见的限流算法
    限流算法是用于控制访问频率、保护系统免受过载攻击的重要手段。常见的限流算法有以下几种,每种算法都有不同的应用场景和优缺点。下面是几种常见的限流算法的详细介绍:1.计数器算法(Counter)原理计数器算法是最简单的限流算法。它在固定的时间窗口内记录请求的次数,一旦请求次......
  • 【智能算法应用】粒子群算法求解最小生成树问题
    目录1.最小生成树MST2.算法原理3.算法过程4.结果展示5.参考文献6.代码获取1.最小生成树MST最小生成树(MinimumSpanningTree,MST)是在给定的加权无向图中寻找一个边的子集,使得这些边构成的树包含图中的所有顶点,并且边的总权重尽可能小。如果图......