算法设计与分析 1.4 区间

Posted yejifeng

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法设计与分析 1.4 区间相关的知识,希望对你有一定的参考价值。

★题目描述

有N个区间,第i个区间的端点是li和ri,即第i个区间覆盖了[li,ri]

是否存在一个编号最小的区间包含所有的区间。如果存在,则输出区间编号,否则输出"-1".

区间包含指的是,假设一个区间[a,b]包含另外一个区间[c,d],需要满足a<=c<=d<=b.

★输入格式

第一行一个整数N表示区间个数,N<=100000

接下去N行每行2个整数li,ri表示第i个区间的端点,1<=li<=ri<=1000000000

对于30%的数据,N<=100, 1<=li<=ri<=100

对于80%的数据,N<=1000, 1<=li<=ri<=1000

对于100%的数据,N<=100000, 1<=li<=ri<=1000000000

★输出格式

一个整数表示满足要求区间的编号。若不存在则输出-1。

★样例输入

3
1 1
2 2
3 3

★样例输出

-1
/*
直切要点:
如果存在一个区间包含所有其他区间
那么该区间的长度一定最大 
*/

#include<bits/stdc++.h>
using namespace std;

int main(){
    int n;
    cin>>n;
    
    int l,r,minL,maxR;
    scanf("%d%d",&minL,&maxR);
    int resL=minL,resR=maxR, resid=1; //如果是答案区间,那么该区间长度一定最大 
    for(int i=2; i<=n; ++i){
        scanf("%d%d",&l,&r);
        minL = min(l,minL);
        maxR = max(r,maxR);
        
        if(resR-resL<r-l) resL=l,resR=r,resid=i; 
    }
    
    if(resL==minL && resR==maxR) printf("%d
",resid);
    else printf("-1
"); 
    return 0;
}

以上是关于算法设计与分析 1.4 区间的主要内容,如果未能解决你的问题,请参考以下文章

片段(Java) | 机试题+算法思路+考点+代码解析 2023

『嗨威说』算法设计与分析 - 算法第二章上机实践报告(二分查找 / 改写二分搜索算法 / 两个有序序列的中位数)

『嗨威说』算法设计与分析 - PTA 数字三角形 / 最大子段和 / 编辑距离问题(第三章上机实践报告)

数据结构与算法分析(C语言描述)习题1.4

算法与程序设计:分支限界法

贪心算法:划分字母区间