区间问题(贪心)(一)

简介: 复习acwing算法基础课的内容,本篇为讲解基础算法:贪心——区间选点,关于时间复杂度:目前博主不太会计算,先鸽了,日后一定补上。

文章目录

前言

一、贪心

二、例题,代码

AcWing 905. 区间选点

本题分析

AC代码

AcWing 908. 最大不相交区间数量

本题分析

AC代码

AcWing 906. 区间分组

本题分析

AC代码

AcWing 907. 区间覆盖

本题分析

AC代码

三、时间复杂度


前言

复习acwing算法基础课的内容,本篇为讲解基础算法:贪心——区间选点,关于时间复杂度:目前博主不太会计算,先鸽了,日后一定补上。


一、贪心

贪心:利益最大化,即找到最优的情况,贪心问题难在证明,即你可能能推断出这个题目的正确解法,但是这个解法下为什么就是最优解不好证明。


区间问题其实就是区间的左右端点的排序问题


二、例题,代码

AcWing 905. 区间选点

本题链接:AcWing 905. 区间选点

本博客给出本题截图:

image.png

本题分析

把每一段区间按照右端点进行排序,然后开始依次遍历,res代表答案,ed是本区间的右端点,如果存在下一个区间的左端点大于本区间的右端点,那么证明这两个区间内没有交集,就让res ++;,然后把ed更新成下一个区间的右端点.

AC代码

#include <cstdio>
#include <algorithm>
using namespace std;
const int N = 100010;
struct St
{
    int l, r;
    bool operator < (const St w) const
    {
        return r < w.r;
    }
}st[N];
int main()
{
    int n;
    scanf("%d", &n);
    for (int i = 0; i < n; i ++ )
    {
        int l, r;
        scanf("%d%d", &l, &r);
        st[i] = {l, r};
    }
    sort(st, st + n);
    int res = 0, ed = -1e9;
    for (int i = 0; i < n; i ++ )
        if (st[i].l > ed) 
        {
            res ++;
            ed = st[i].r;
        }
    printf("%d", res);
    return 0;
}

AcWing 908. 最大不相交区间数量

本题链接:AcWing 908. 最大不相交区间数量

本博客给出本题截图:

image.png

本题分析

本题与上题一致

AC代码

#include <cstdio>
#include <algorithm>
using namespace std;
const int N = 100010;
struct St
{
    int l, r;
    bool operator < (const St w) const
    {
        return r < w.r;
    }
}st[N];
int main()
{
    int n;
    scanf("%d", &n);
    for (int i = 0; i < n; i ++ )
    {
        int l, r;
        scanf("%d%d", &l, &r);
        st[i] = {l, r};
    }
    sort(st, st + n);
    int res = 0, ed = -1e9;
    for (int i = 0; i < n; i ++ )
        if (st[i].l > ed) 
        {
            res ++;
            ed = st[i].r;
        }
    printf("%d", res);
    return 0;
}





目录
相关文章
|
人工智能 算法
前缀和算法题(区间次方和、小蓝平衡和、大石头的搬运工、最大数组和)
前缀和算法题(区间次方和、小蓝平衡和、大石头的搬运工、最大数组和)
|
Java 开发工具
Java 技术篇-IntelliJ IDEA修改java、jdk版本实例演示
Java 技术篇-IntelliJ IDEA修改java、jdk版本实例演示
705 0
Java 技术篇-IntelliJ IDEA修改java、jdk版本实例演示
|
4天前
|
云安全 人工智能 算法
以“AI对抗AI”,阿里云验证码进入2.0时代
三层立体防护,用大模型打赢人机攻防战
1315 4
|
4天前
|
机器学习/深度学习 安全 API
MAI-UI 开源:通用 GUI 智能体基座登顶 SOTA!
MAI-UI是通义实验室推出的全尺寸GUI智能体基座模型,原生集成用户交互、MCP工具调用与端云协同能力。支持跨App操作、模糊语义理解与主动提问澄清,通过大规模在线强化学习实现复杂任务自动化,在出行、办公等高频场景中表现卓越,已登顶ScreenSpot-Pro、MobileWorld等多项SOTA评测。
660 3
|
5天前
|
人工智能 Rust 运维
这个神器让你白嫖ClaudeOpus 4.5,Gemini 3!还能接Claude Code等任意平台
加我进AI讨论学习群,公众号右下角“联系方式”文末有老金的 开源知识库地址·全免费
|
11天前
|
编解码 人工智能 自然语言处理
⚽阿里云百炼通义万相 2.6 视频生成玩法手册
通义万相Wan 2.6是全球首个支持角色扮演的AI视频生成模型,可基于参考视频形象与音色生成多角色合拍、多镜头叙事的15秒长视频,实现声画同步、智能分镜,适用于影视创作、营销展示等场景。
766 6