贪心算法-区间问题 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;
}
相关推荐
Aision_2 小时前
从工具调用到 MCP、Skill完整学习记录
java·python·gpt·学习·langchain·prompt·agi
zc.z6 小时前
JAVA实现:纯PCM格式音频转换成BASE64
java·音视频·pcm
mask哥6 小时前
力扣算法java实现汇总整理(上)
java·算法·leetcode
Aaswk7 小时前
Java Lambda 表达式与流处理
java·开发语言·python
是宇写的啊7 小时前
Spring AOP
java·spring
万邦科技Lafite8 小时前
京东item_get接口实战案例:实时商品价格监控全流程解析
java·开发语言·数据库·python·开放api·淘宝开放平台
王老师青少年编程9 小时前
csp信奥赛C++高频考点专项训练之字符串 --【子串查找】:[NOIP 2009 提高组] 潜伏者
c++·字符串·csp·高频考点·信奥赛·子串查找·潜伏者
初願致夕霞9 小时前
基于系统调用的Linux网络编程——UDP与TCP
linux·网络·c++·tcp/ip·udp
Mr_pyx9 小时前
Spring AI 入门教程:Java开发者的AI应用捷径
java·人工智能·spring
Zephyr_09 小时前
Leedcode算法题
java·算法