当前位置: 首页 > 编程笔记 >

查找C ++中所有区间的交集

安坚诚
2023-03-14
本文向大家介绍查找C ++中所有区间的交集,包括了查找C ++中所有区间的交集的使用技巧和注意事项,需要的朋友参考一下

假设我们有N个间隔,形式为{L,R},L是开始时间,R是结束时间。我们必须找到所有间隔的交集。相交是位于所有给定间隔内的间隔。如果找不到,则返回-1。例如,如果间隔类似于[{1,6},{2,8},{3,10},{5,8},则输出间隔为{5,6}

为了解决这个问题,我们将按照以下步骤操作:

  • 考虑第一个间隔是最后一个间隔

  • 从第二个间隔开始,尝试搜索交点。可能有两种情况

    • 仅当R1 <L2或R2 <L1时[L1,R1]和[L2,R2]之间不可能有交集,在这种情况下,答案将为0

    • [L1,R1]和[L2,R2]之间没有交集,则所需的交集为{max(L1,L2),min(R1,R2)}

示例

#include<iostream>
#include<algorithm>
using namespace std;
class interval{
   public:
      int left, right;
};
void findIntersection(interval intervals[], int N) {
   int l = intervals[0].left;
   int r = intervals[0].right;
   for (int i = 1; i < N; i++) {
      if (intervals[i].left > r || intervals[i].right < l) {
         cout << -1;
         return;
      } else {
         l = max(l, intervals[i].left);
         r = min(r, intervals[i].right);
      }
   }
   cout << "{" << l << ", " << r << "}";
}
int main() {
   interval intervals[] = {{ 1, 6 }, { 2, 8 }, { 3, 10 }, { 5, 8 } };
   int N = sizeof(intervals) / sizeof(intervals[0]);
   findIntersection(intervals, N);
}

输出结果

{5, 6}
 类似资料:
  • 本文向大家介绍在C ++中查找所有好的字符串,包括了在C ++中查找所有好的字符串的使用技巧和注意事项,需要的朋友参考一下 假设我们有两个字符串s1和s2。这些字符串的大小为n,我们还有另一个字符串称为evil。我们必须找到好字符串的数量。 如果字符串的大小为n,则按字母顺序大于或等于s1,按字母顺序小于或等于s2,并且作为子字符串不包含邪恶,则该字符串称为良。答案可能非常大,因此请以10 ^ 9

  • 本文向大家介绍查找信号到达字符串中所有位置所花费的时间-C ++,包括了查找信号到达字符串中所有位置所花费的时间-C ++的使用技巧和注意事项,需要的朋友参考一下 在本教程中,我们将编写一个程序来计算信号到达字符串中所有位置所花费的时间。让我用一个例子来解释它。 我们将有一个仅包含s和p字符的字符串。s是信号,p是字符串中的位置。信号从s开始,沿左右两个方向传播。我们假设要花费一个单位时间才能到达

  • 我想找出numpy数组中所有值之间的差异,并将其附加到一个新列表中。 也就是说,对于一个的每个值

  • 问题内容: 我有一个包含一些数据的JSON对象,我想获取每次出现的特定键名的所有值。是否有任何预定义的方法来搜索JSON对象中所有出现的键或需要编写用户定义的方法? 样本杰森 问题答案: 可以使用LINQ to JSON通过使用具有递归路径的方法来实现 参考文献: Json.NET-文档-解析JSON Json.NET 6.0版本1-JSONPath和F#支持 JSONPath表达式

  • 本文向大家介绍在C ++中查找数组中的分区点,包括了在C ++中查找数组中的分区点的使用技巧和注意事项,需要的朋友参考一下 在本教程中,我们将在数组中找到分区点,该数组中所有剩余的元素都很小,而所有剩余的元素都很大。 让我们看看解决问题的步骤。 初始化数组。 遍历数组。 从0迭代到I,然后检查每个值是否小于当前值。 从I迭代到n,并检查每个值是否大于当前值。 如果机器人满足条件,则返回该值。 打印

  • 与其查询具有开始和结束日期的间隔列表,不如从列表中检索仅与搜索开始和结束日期重叠的所有间隔,最好的方法是: 使用整数示例,以整数间隔列表为例。在此列表中,以下是所有唯一的间隔集,其中每组中的每个间隔都相互重叠: 以下是DateInterval的类: 我将收到按开始时间排序的间隔列表,如下所示: (在这个示例列表中,开始日期和结束日期总是均匀地落在一小时上。但是,它们可以落在任何一秒上(或者毫秒)。