986. Intersection of interval lists
Moderate Difficulty 283 Favorites and Sharing Switch to English to receive dynamic feedback
Given two lists consisting of some closed intervals firstList
, and secondList
, where firstList[i] = [starti, endi]
and secondList[j] = [startj, endj]
. Each list of intervals is pairwise disjoint and sorted .
Returns the intersection of these two interval lists .
Formally, a closed interval [a, b]
(where a <= b
) represents x
the set of real numbers, while a <= x <= b
.
The intersection of two closed intervals is a set of real numbers, either the empty set or a closed interval. For example, the intersection of [1, 3]
and [2, 4]
is [2, 3]
.
Example 1:
Input: firstList = [[0,2],[5,10],[13,23],[24,25]], secondList = [[1,5],[8,12],[15,24] ,[25,26]] Output: [[1,2],[5,5],[8,10],[15,23],[24,24],[25,25]]
Example 2:
Input: firstList = [[1,3],[5,9]], secondList = [] Output: []
Example 3:
Input: firstList = [], secondList = [[4,8],[10,12]] Output: []
Example 4:
Input: firstList = [[1,7]], secondList = [[3,10]] Output: [[3,7]]
hint:
0 <= firstList.length, secondList.length <= 1000
firstList.length + secondList.length >= 1
0 <= starti < endi <= 109
endi < starti+1
0 <= startj < endj <= 109
endj < startj+1
Number of passes: 44,426 Number of submissions: 64,986
Solution: This question is not difficult. Just find the intersection of the intervals. Note that they are all closed intervals, and then traverse it once to get the result. As long as the ideas are clear, the code can be written over and over again.
class Solution {
public:
vector<vector<int>> intervalIntersection(vector<vector<int>>& firstList, vector<vector<int>>& secondList) {
vector<vector<int>> res;
if(firstList.size()==0 || secondList.size()==0)
return res;
else
{
int i=0,j=0;
while(i<firstList.size() && j<secondList.size())
{
// 如果没有交集的情况
if(firstList[i][0]>secondList[j][1] || firstList[i][1]<secondList[j][0])
{
if(firstList[i][0]>secondList[j][1])
j++;
else
i++;
}
else
{
vector<int> tem;
int left=max(firstList[i][0],secondList[j][0]);
int right=min(firstList[i][1],secondList[j][1]);
tem.push_back(left);
tem.push_back(right);
res.push_back(tem);
if(firstList[i][1]<secondList[j][1])
i++;
else
j++;
}
}
return res;
}
}
};
Results of the:
pass
Show details
Add notes
Execution time: 24 ms, beating 92.77% of all C++ submissions
Memory consumption: 19.3 MB, beats 8.99% of users among all C++ submissions
Passed test cases: 85/85