贪心算法-区间问题 C++

题目一

解题思路

原题解:https://www.acwing.com/solution/content/79913/![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/711a981f425740b7ad5856e519c08b7a.png)

代码实现

cpp 复制代码
#include<iostream>
#include<algorithm>

using namespace std;

const int N = 1e5 + 10;

struct Range {
    int l, r;
    
    bool operator < (const Range &w) const {
        return r < w.r;
    }
}range[N];

int main()
{
    int n;
    cin >> n;
    
    for (int i = 0; i < n; i ++ )
    {
        scanf("%d%d", &range[i].l, &range[i].r);
    }
    
    sort(range, range + n);
    
    int res = 0, ed = -0x3f3f3f3f;
    for (int i = 0; i < n; i ++ )
    {
        if (ed < range[i].l)
        {
            res ++;
            ed = range[i].r;
        }
    }
    
    cout << res;
    return 0;
}

题目二

解题思路

代码实现

cpp 复制代码
#include<iostream>
#include<algorithm>

using namespace std;

const int N = 1e5 + 10;

struct Range {
    int l, r;
    bool operator < (const Range &w) const {
        return r < w.r;
    }
}range[N];

int main()
{
    int n;
    cin >> n;
    
    for (int i = 0; i < n; i ++ )
    {
        scanf("%d%d", &range[i].l, &range[i].r);
    }
    
    sort(range, range + n);
    int res = 0, ed = -0x3f3f3f3f;
    
    for (int i = 0; i < n; i ++ )
    {
        if (ed < range[i].l)
        {
            ed = range[i].r;
            res ++;
        }
    }
    
    cout << res;
    return 0;
}

题目三

解题思路

原题解:https://www.acwing.com/solution/content/14773/

代码实现

cpp 复制代码
#include<iostream>
#include<algorithm>
#include<queue>

using namespace std;

const int N = 1e5 + 10;

struct Range {
    int l, r;
    bool operator < (const Range &w) const
    {
        return l < w.l;
    }
}range[N];

int main()
{
    int n;
    cin >> n;
    
    for (int i = 0; i < n; i ++ )
    {
        scanf("%d%d", &range[i].l, &range[i].r);
    }
    
    sort(range, range + n);
    priority_queue<int ,vector<int>, greater<int>> heap;
    
    for (int i = 0; i < n; i ++)
    {
        if (heap.empty() || range[i].l <= heap.top())
        {
            heap.push(range[i].r);
        }
        else
        {
            heap.pop();
            heap.push(range[i].r);
        }
    }
    
    cout << heap.size();
    return 0;
}

题目四

解题思路

原题解:https://www.acwing.com/solution/content/16980/

为什么r = -2e9不能放在for循环内:

例如样例:

4 10 2

4 5

11 12

当第一轮st更新后是5,第二轮j 还是 0,不过此时应该退出了,但如果-2e9放在外面,

if (r < st)

{

res = -1;

break;

}

就不会执行

代码实现

cpp 复制代码
#include<iostream>
#include<algorithm>

using namespace std;

const int N = 1e5 + 10;

struct Range {
    int l, r;
    bool operator < (const Range &w) const {
        return l < w.l;
    }
}range[N];

int main()
{
    int st, ed, n;
    cin >> st >> ed >> n;
    
    for (int i = 0; i < n; i ++ )
    {
        scanf("%d%d", &range[i].l, &range[i].r);
    }
    
    sort(range, range + n);
    
    int res = 0;
    bool flag = false;
    for (int i = 0; i < n; i ++)
    {
        int j = i, r = -0x3f3f3f3f;
        while (range[j].l <= st && j < n)
        {
            r = max(r, range[j].r);
            j ++;
        }
        
        if (r < st)
        {
            flag = true;
            break;
        }
        
        res ++;
        st = r;
        
        if (r >= ed)
        {
            break;
        }
        
        i = j - 1;
    }
    
    if (flag || st < ed)
    {
        res = -1;
    }
    
    cout << res;
    return 0;
}
相关推荐
怪兽20141 小时前
Redis过期键的删除策略有哪些?
java·数据库·redis·缓存·面试
筏.k1 小时前
C++ 设计模式系列:生产者-消费者模式完全指南
开发语言·c++·设计模式
workflower4 小时前
单元测试-例子
java·开发语言·算法·django·个人开发·结对编程
YuanlongWang4 小时前
C# 基础——装箱和拆箱
java·开发语言·c#
b78gb4 小时前
电商秒杀系统设计 Java+MySQL实现高并发库存管理与订单处理
java·开发语言·mysql
wb043072015 小时前
性能优化实战:基于方法执行监控与AI调用链分析
java·人工智能·spring boot·语言模型·性能优化
LXS_3575 小时前
Day 05 C++ 入门 之 指针
开发语言·c++·笔记·学习方法·改行学it
天若有情6736 小时前
Java Swing 实战:从零打造经典黄金矿工游戏
java·后端·游戏·黄金矿工·swin
lichong9517 小时前
Android studio 修改包名
android·java·前端·ide·android studio·大前端·大前端++
lichong9517 小时前
Git 检出到HEAD 再修改提交commit 会消失解决方案
java·前端·git·python·github·大前端·大前端++