【leetcode刷题笔记】986. 区间列表的交集

题目

给定两个由一些闭区间组成的列表,每个区间列表都是成对不相交的,并且已经排序。

返回这两个区间列表的交集。

(形式上,闭区间 [a, b](其中 a <= b)表示实数 x 的集合,而 a <= x <= b。两个闭区间的交集是一组实数,要么为空集,要么为闭区间。例如,[1, 3] 和 [2, 4] 的交集为 [2, 3]。)

样例

输入:A = [[0,2],[5,10],[13,23],[24,25]], B = [[1,5],[8,12],[15,24],[25,26]]
输出:[[1,2],[5,5],[8,10],[15,23],[24,24],[25,25]]
注意:输入和所需的输出都是区间对象组成的列表,而不是数组或列表。

思路

A数组中从第一个开始遍历,让这个数组和和B数组中的第一个数组比较,如果A数组的end大于等于B数组的start,然后让A数组的start和B数组的start比较取大的,A数组的end和B数组的end比较取小的,如果此时新取的start小于等于end放入新数组中,此时再让A数组的第一个数组和B数组的第2个数组进行比较,如果A数组的第一个数组的end大于等于B数组的第2个数组的start执行上述过程,如果不满足,开始对A数组的第2个数组比较。

代码

class Solution 
{
public:
    vector<Interval> intervalIntersection(vector<Interval>& A, vector<Interval>& B) 
    {
        int len1 = A.size();
        int len2 = B.size();
        vector<Interval> answer;
        Interval temp;
        int index;
        int new_start;
        int new_end;
        if( (len1 == 0) || (len2 == 0))
            return answer;
        for(int i = 0; i < len1; i++)
        {
            index = 0;
            while( (index < len2) && (A[i].end >= B[index].start))  //index < len2是为了防止越界访问
            {            
                new_start = max(A[i].start,B[index].start);
                new_end   = min(A[i].end,B[index].end);
                if(new_start <= new_end)
                {
                    temp.start = new_start;
                    temp.end = new_end;
                    answer.push_back(temp);
                }
                index++;
            }
        }
        return answer;
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

白月光soul

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值