中程度の難易度 283 のお気に入りと共有 英語に切り替えて、動的なフィードバックを受け取ります
いくつかの閉じた区間 firstList
と から構成される2 つのリストがあるとします。secondList
ここで、 firstList[i] = [starti, endi]
と secondList[j] = [startj, endj]
。間隔の各リストは ペアごとに素であり 、 ソートされています 。
これら 2 つの間隔リストの交差部分を返します 。
正式には、閉区間 [a, b]
(ここで a <= b
) は x
実数のセット を表しますa <= x <= b
。
2 つの閉区間の 共通部分は 、実数のセット (空集合または閉区間のいずれか) です。たとえば、[1, 3]
と の 交点[2, 4]
は です [2, 3]
。
例 1:
入力: firstList = [[0,2],[5,10],[13,23],[24,25]]、 SecondList = [[1,5],[8,12],[15,24] ,[25,26]] 出力: [[1,2],[5,5],[8,10],[15,23],[24,24],[25,25]]
例 2:
入力: firstList = [[1,3],[5,9]]、 SecondList = [] 出力: []
例 3:
入力: firstList = []、nextList = [[4,8],[10,12]] 出力: []
例 4:
入力: firstList = [[1,7]]、 SecondList = [[3,10]] 出力: [[3,7]]
ヒント:
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
パス数: 44,426 提出数: 64,986
解決策: この質問は難しいものではありません。区間の交点を見つけるだけです。これらはすべて閉じた区間であることに注意して、その区間を 1 回横断して結果を取得します。アイデアが明確である限り、コードは何度でも書くことができます。
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;
}
}
};
結果:
合格
詳細を表示
メモを追加する
実行時間: 24 ミリ秒、すべての C++ 送信の 92.77% を上回りました
メモリ消費量: 19.3 MB、すべての C++ 送信のユーザーの 8.99% を上回ります
合格したテスト ケース: 85/85