区间问题——905. 区间选点

news2024/11/17 12:00:18

目录

区间问题

定义

运用情况

注意事项

解题思路

AcWing 905. 区间选点

题目描述

运行代码

代码思路

改进思路

其它代码

代码思路

区间问题

定义

区间通常是指一个连续的范围,可以用数轴上的一段来表示。

运用情况

  • 在数学中广泛用于表示变量的取值范围,如函数的定义域、值域等。
  • 在统计学中用于描述数据的分布区间。
  • 在实际生活中,如时间区间、温度区间等。

注意事项

  • 明确区间的端点是否包含在内(开区间或闭区间)。
  • 对于多个区间的组合,要仔细分析它们之间的关系。
  • 在计算和推理时,要确保区间的定义和条件始终一致。

解题思路

  • 首先确定区间的类型(开区间、闭区间等)。
  • 根据题目条件,列出相关方程或不等式来确定区间的范围。
  • 对于复杂的区间问题,可以通过图形来辅助理解和分析。
  • 检查答案是否满足区间的定义和题目要求。

AcWing 905. 区间选点

题目描述

905. 区间选点 - AcWing题库

运行代码

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
    int n;
    cin >> n;
    vector<pair<int, int>> intervals(n);
    for (int i = 0; i < n; i++) {
        cin >> intervals[i].first >> intervals[i].second;
    }
    sort(intervals.begin(), intervals.end(), [](const pair<int, int>& a, const pair<int, int>& b) {
        return a.second < b.second;
    });
    int ans = 0, lastPoint = -1000000001;
    for (const auto& interval : intervals) {
        if (interval.first > lastPoint) {
            ans++;
            lastPoint = interval.second;
        }
    }
    cout << ans << endl;
return 0;
}

代码思路

  • 首先,读取区间的数量 n
  • 创建一个 vector<pair<int, int>> 来存储所有的区间。
  • 通过循环读取每个区间的左右端点并存储到 intervals 中。
  • 然后对区间按照右端点进行排序,这样可以保证先处理右边界较小的区间。
  • 初始化结果 ans 为 0,以及一个表示上一个选择的点的位置 lastPoint 为一个极小值。
  • 遍历排序后的区间:如果当前区间的左端点大于上一个选择的点的位置,说明需要在这个区间内选择一个新的点,将结果加 1,并更新 lastPoint 为当前区间的右端点。这样就可以保证每个区间都至少有一个点被选中,且是尽可能少的点。最后输出结果。
  • 这种贪心策略的核心在于优先处理右边界较小的区间,通过不断更新选择点的位置来满足所有区间的覆盖要求。

改进思路

  1. 添加输入有效性检查:可以在读取 n 以及区间端点值时,添加一些检查来确保输入数据的合法性。
  2. 考虑使用更高效的数据结构:如果对性能要求较高,可以研究是否有更适合的数据结构来存储和处理区间信息。
  3. 添加必要的注释:进一步增加代码的注释,以提高代码的可理解性。
  4. 异常处理:考虑添加一些针对可能出现的异常情况(如输入错误、排序失败等)的处理机制。
  5. 代码重构:对一些逻辑部分进行重构,使其结构更加清晰,逻辑更加简洁。
  6. 性能优化:分析代码中可能存在的性能瓶颈,进行针对性优化,比如尝试不同的排序算法等。

其它代码

#include <iostream>
#include <algorithm>
using namespace std;
const int N = 100010;
struct R
{
    int l, r;
    bool operator < (const R &W)const
    {
        return r < W.r;
    }
}r[N];
int main()
{
    int n; cin >> n;
    for(int i = 0; i < n ; i++)
    {
        int a, b; cin >> a >> b;
        r[i] = {a, b};
    }
    sort(r, r + n);
    int ans = 0, right = -2e9;
    for(int i = 0; i < n; i++)
    {
        if(r[i].l > right)
        {
            ans ++;
            right = r[i].r;
        }
    }
    cout << ans << endl;
    return 0;
}

代码思路

  • 定义了一个结构体 R 来表示区间,包含左端点 l 和右端点 r,并定义了结构体之间的比较运算符,按照右端点从小到大排序。
  • 在 main 函数中,首先输入区间的数量 n,然后依次输入每个区间的左右端点,并将其存储在 r 数组中。
  • 通过 sort 函数对区间数组按照右端点排序。
  • 然后通过遍历数组,使用一个变量 right 来记录当前已经覆盖到的最右端位置。如果当前区间的左端点大于 right,说明这是一个新的不重叠区间,就将结果加 1,并更新 right 为当前区间的右端点。最后输出不重叠区间的数量。

总的来说,这段代码的目的是通过对区间进行排序和遍历,计算出不重叠区间的最大数量。例如,假设有一系列区间 [1, 3][2, 4][4, 6],经过处理后可以得出有 2 个不重叠区间([1, 3] 和 [4, 6])。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1857057.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【初阶数据结构】深入解析栈:探索底层逻辑

&#x1f525;引言 本篇将深入解析栈:探索底层逻辑&#xff0c;理解底层是如何实现并了解该接口实现的优缺点&#xff0c;以便于我们在编写程序灵活地使用该数据结构。 &#x1f308;个人主页&#xff1a;是店小二呀 &#x1f308;C语言笔记专栏&#xff1a;C语言笔记 &#x1…

Paimon Trino Presto的关系 分布式查询引擎

Paimon支持的引擎兼容性矩阵&#xff1a; Trino 是 Presto 同项目的不同版本&#xff0c;是原Faceboo Presto创始人团队核心开发和维护人员分离出来后开发和维护的分支&#xff0c;Trino基于Presto&#xff0c;目前 Trino 和 Presto 都仍在继续开发和维护。 Trino 生态系统-客…

YOLOv8改进 | SPPF | 具有多尺度带孔卷积层的ASPP【CVPR2018】

&#x1f4a1;&#x1f4a1;&#x1f4a1;本专栏所有程序均经过测试&#xff0c;可成功执行&#x1f4a1;&#x1f4a1;&#x1f4a1; 专栏目录 &#xff1a;《YOLOv8改进有效涨点》专栏介绍 & 专栏目录 | 目前已有40篇内容&#xff0c;内含各种Head检测头、损失函数Loss、…

基于SSM+Jsp的校园餐厅管理

开发语言&#xff1a;Java框架&#xff1a;ssm技术&#xff1a;JSPJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包…

【C语言】函数执行背后的秘密:函数栈帧的创建和销毁超详解

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】 目录 1. 什么是函数栈帧 2. 理解函数栈帧能解决什么问题呢&#xff1f; 3. 函数栈帧的创建和销毁解析 3.1 什么是栈&#xff1f; 3.2 认识相关寄存器和汇编指…

感恩父爱 健康同行 宁夏康源父亲节特惠普查

父亲&#xff0c;是那道坚实的屏障&#xff0c;为孩子们挡风遮雨。父亲&#xff0c;是那颗明亮的灯塔&#xff0c;为孩子们指明前进的方向。然而岁月无情&#xff0c;随着年龄的增长&#xff0c;曾经为我们遮风挡雨的父亲如今也逐渐进入了各种疾病的高发期。感恩父爱&#xff0…

selenium前期准备

1. 驱动地址&#xff1a; a. chromedriver:https://googlechromelabs.github.io/chrome-for-testing/ b. https://registry.npmmirror.com/binary.html?pathchromedriver/ 下载好的驱动一般放在Python初始文件夹下&#xff0c;例如&#xff1a;D:\Python3.8 2. selenium原理…

USB2.0学习4--USB包结构和包类型

目录 1. USB包基本结构 1.1 SOP域&#xff08;Start Of Packet&#xff09; 1.2 SYNC域&#xff08;同步域&#xff09; 1.3 PID域&#xff08;标识域&#xff09; 1.4 地址域&#xff08;ADDR&#xff09; 1.5 帧号域&#xff08;Fram&#xff09; 1.6 数据域&#xff…

医卫兰大药学试题及答案,分享几个实用搜题和学习工具 #经验分享#笔记#知识分享

随着信息技术的快速发展&#xff0c;搜题软件应运而生&#xff0c;为大学生提供了便捷的问题解答方式。 1.滑记 你可以选择一个学习类别&#xff0c;部分学习类别包括了多个学习卡包&#xff0c;每个学习卡包提供了简介和目录&#xff0c;每个学习卡包有多张学习卡片。 里面…

如何使用MATLAB写测试(4)重复劳动?TestMethodSetup!

如何使用MATLAB写测试&#xff08;4&#xff09;重复劳动&#xff1f;TestMethodSetup&#xff01; 原文&#xff1a;如何使用MATLAB写测试&#xff08;4&#xff09;重复劳动&#xff1f;TestMethodSetup&#xff01; - 知乎 (zhihu.com) 我们来自俄罗斯的实习生是学Compute…

SmartEDA引领教育革命:创新电路设计,点亮学生实践之路!

在数字化浪潮席卷全球的今天&#xff0c;教育领域的每一次创新都牵动着无数家长与学生的心。特别是在电路设计这一复杂而有趣的领域中&#xff0c;学生们往往因为缺乏实践机会和高效工具而感到迷茫。然而&#xff0c;随着SmartEDA的横空出世&#xff0c;这一切正在悄然发生改变…

通用大模型VS垂直大模型:你更青睐哪一方?

目录 引言 背景介绍 国内外垂直大模型的发展情况 国内外通用大模型的发展情况 哪一路径更为火热&#xff1f; 能力分析 通用大模型的独特能力 垂直大模型的独特能力 两者的差异与互补 难点探究 算力的挑战 数据的挑战 算法的挑战 结论 表格总结 引言 AI大模型的战…

前端开发接单公司做到哪些点,客户才愿意把项目包给你。

作为前端外包接单公司&#xff0c;你知道客户选择和你合作都看中哪些因素吗&#xff1f;单纯是价格吗&#xff1f;未必&#xff0c;本位给大家列举7个要素&#xff0c;并对每个要素做了定位&#xff0c;大家查缺补漏吧。 作为前端外包接单公司&#xff0c;要吸引同行客户将前端…

AI儿童绘本创作

之前分享过AI儿童绘画的项目&#xff0c;但是主要问题是角色一致要花费很长的时间&#xff01; 今天发现了这款&#xff0c;非常奈斯&#xff01; 只需输入故事主题、风格、模板&#xff0c;软件就会自动创作故事内容&#xff0c;自动生成插画配图&#xff0c;自动根据模板生…

29 哈希

目录 unordered系列关联式容器底层结构模拟实现 1. unordered系列关联式容器 在c98中&#xff0c;STL提供了底层为红黑树结构的一系列关联式容器&#xff0c;在查询时效率可达到 l o g 2 N log_2N log2​N&#xff0c;即最差情况下需要比较红黑树的高度次&#xff0c;当树中…

零基础STM32单片机编程入门(一)初识STM32单片机

文章目录 一.概要二.单片机型号命名规则三.STM32F103系统架构四.STM32F103C8T6单片机启动流程五.STM32F103C8T6单片机主要外设资源六.编程过程中芯片数据手册的作用1.单片机外设资源情况2.STM32单片机内部框图3.STM32单片机管脚图4.STM32单片机每个管脚可配功能5.单片机功耗数据…

【云计算 复习】第5节 交互式分析工具Dremel(含大题)

一、概念 1.概述 &#xff08;1&#xff09;数据本身不会产生价值 只有经过分析才有可能产生价值。 &#xff08;2&#xff09;Google的Dremel是第一个在嵌套数据模型基础上实现列存储的系统。 &#xff08;3&#xff09;列存储有其便利之处&#xff0c;因为在不同列中相同位置…

windows-docker-本地部署-前端

前置条件 docker已有需要打包的文件也已经写好了 打包镜像 ip地址修改 需要根据自身修改的文件 .env.local文件存放你前端访问的端口 172.24.240.1:这部分是自己电脑的ip 如何查看本机ip&#xff0c;使用IPV4的地址。 #本地 #API_HOST_URLhttp://172.24.240.1:8091打包文…

在线装修管理系统的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;管理员管理&#xff0c;装修队管理&#xff0c;用户管理&#xff0c;装修管理&#xff0c;基础数据管理&#xff0c;论坛管理 前台账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;…

C语言中操作符详解(二)

OK&#xff0c;今天继续为诸君带来有关C语言中操作符的讲解 一 . 位操作符 C语言中的位操作符我相信大家并不陌生&#xff0c;我们在之前就已经接触过了一些 位操作符&#xff08;位操作符的操作数只能是整数&#xff09;&#xff1a; &#xff08;1&#xff09;& &…