首页 > 其他分享 >8602 区间相交问题(优先做)

8602 区间相交问题(优先做)

时间:2024-09-01 21:54:33浏览次数:10  
标签:count 优先 end 8602 interval 相交 int intervals 区间

### 思路
1. **输入处理**:读取区间数和每个区间的端点。
2. **排序区间**:按照区间的右端点进行排序。
3. **选择区间**:使用贪心算法选择不相交的区间,尽可能多地选择区间。
4. **计算结果**:计算需要去掉的区间数。

### 细节
- **排序**:将所有区间按照右端点从小到大排序。
- **贪心选择**��从左到右遍历区间,选择不与前一个选择的区间相交的区间。
- **计算去掉的区间数**:总区间数减去选择的区间数。

### 伪代码
```plaintext
function min_intervals_to_remove(n, intervals):
    sort intervals by end point
    count = 0
    end = -infinity
    for each interval in intervals:
        if interval.start >= end:
            end = interval.end
        else:
            count += 1
    return count
```

### C++代码

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

int min_intervals_to_remove(int n, vector<pair<int, int>>& intervals) {
    // Sort intervals by their end points
    sort(intervals.begin(), intervals.end(), [](const pair<int, int>& a, const pair<int, int>& b) {
        return a.second < b.second;
    });

    int count = 0;
    int end = -1000000000; // Use a large negative number instead of INT_MIN

    for (const auto& interval : intervals) {
        if (interval.first >= end) {
            end = interval.second;
        } else {
            count += 1;
        }
    }

    return count;
}

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;
    }

    cout << min_intervals_to_remove(n, intervals) << endl;

    return 0;
}

标签:count,优先,end,8602,interval,相交,int,intervals,区间
From: https://blog.csdn.net/huang1xiao1sheng/article/details/141602015

相关文章

  • 代码随想录算法训练营,8月31日 | 24. 两两交换链表中的节点,19.删除链表的倒数第N个节点
    24.两两交换链表中的节点题目链接:24.两两交换链表中的节点文档讲解︰代码随想录(programmercarl.com)视频讲解︰两两交换链表中的节点日期:2024-08-31做前思路:用上虚拟头指针,从头开始,先指向2再到1,再到3,但要注意保留原本的结点。Java代码如下:classSolution{publicListN......
  • leetcode刷题day4|链表部分(24. 两两交换链表中的节点 、19.删除链表的倒数第N个节点、
    前言:链表练习的第二天,对链表的理解加深了24.两两交换链表中的节点这个题一开始的思路是用cur和next两个指针来做,但是绕来绕去绕迷糊了,最后超时了。把错误的代码放在下面警醒大家:主要问题出现在这两行代码,next.next发生了更改。next.next=next.next.next;next.next.nex......
  • .NET|--WPF|--笔记合集|--依赖项属性|--4.依赖项属性值优先级
    前言前几篇笔记讲到了依赖项属性的定义,注册等.接下来就该是依赖项属性的实战了.如果依赖项属性是一个主机的话,前几个步骤还在于组装这个主机,组装好了之后,就要开始使用了,是骡子是马,拉出来遛遛.但是一般任何事物在使用之前,都有一些注意事项,如果不了解这些注......
  • mysql参数和配置文件优先级
    mysqld-auto.cnf,持久化配置参数文件(位于DATA目录)(mysqld-auto.cnf中的变量如果和my.cnf相同则使用mysqld-auto.conf中的)命令行输入的配置参数代码中指定配置文件my.cnf中的配置参数命令行输入配置文件my.cnf中的配置参数/etc目录中的配置文件my.cnf中的配置参数/etc/mysql目录中......
  • 深度优先搜索模板
    深度优先搜索(DFS)是一种用于遍历或搜索图或树的算法。以下是深度优先搜索的模板:visited=set()defdfs(node):#如果节点已经访问过,则直接返回ifnodeinvisited:return#标记节点为已访问visited.add(node)#对当前节点的所......
  • 层序遍历(广度优先搜索)-102
    题目描述给你二叉树的根节点root,返回其节点值的层序遍历。(即逐层地,从左到右访问所有节点)。解题思路这里我们层次遍历我们需要使用到队列这个数据结构,我们依次从根节点开始遍历,我们需要使用一个变量来记录此时我们队列中元素的数量,因为这样我们才知道这一层我们需要从队列......
  • 数据结构之广度优先搜索
    一、基本思想BFS的基本思想是使用队列(Queue)数据结构来实现。队列是一种先进先出(FIFO)的数据结构,这符合BFS逐层访问节点的需求。在BFS中,首先将起始节点加入队列,并标记为已访问。然后,从队列中取出一个节点,访问其所有未被访问的相邻节点,并将这些相邻节点加入队列。重复这个过程......
  • 代码随想录day44 || 1143 最长公共子序列, 1035 不相交的线, 53 最大子序列和, 392 判
    1143最长公共子序列funclongestCommonSubsequence(text1string,text2string)int{ //思路和判断最长公共数组一样 //dp[i][j]表示以text1[i],text2[j]为结尾的最长公共子序列的长度 //iftext1[i]==text2[j]{dp[i+1][j+1]=dp[i][j]+1}else{dp[i+1][j+1]=......
  • c++算法3-广度优先搜索算法dfs
    搜索算法众所周知,搜索算法分为常见的两种深度优先搜索算法(dfs)广度优先搜索算法(bfs)深度优先搜索算法深度优先搜索算法就是一条道走到黑,如迷宫问题,重复不断地向前探索如果碰到死胡同就说明前面已经没有路了,这时候就可以想其他方向搜索,最终走到终点。回溯回溯是一种搜索算法......
  • firewalld:富规则的优先级顺序
    一,firewalld的rich规则执行逻辑如下: 1,日志规则2,drop/reject规则3,accept规则二,例子:验证是否先匹配reject规则1,添加两条规则:第一条允许指定ip访问22端口第二条禁止同一个ip访问[root@blog~]#firewall-cmd--add-rich-rule='rulefamily="ipv4"sourceaddress="13.17.12.21......