각 간격에 두 개의 값[start, end]이 있는 간격의 2차원 목록이 있다고 가정합니다. 다른 간격을 포함하는 간격이 있는지 여부를 찾아야 합니다.
따라서 입력이 [[2,4],[5,11],[5,9],[10,10]]과 같으면 출력은 [5,11]에 [5, 9].
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
-
배열 v
정렬 -
하나의 2D 배열 ret 정의
-
각 간격에 대해 v −
-
ret가 비어 있으면 -
-
ret의 끝에 삽입
-
-
그렇지 않으면 ret>=it[0]의 마지막 요소인 경우 -
-
true를 반환
-
-
그렇지 않으면
-
ret의 끝에 삽입
-
-
-
거짓을 반환
이해를 돕기 위해 다음 구현을 살펴보겠습니다. −
예시
#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
bool static cmp(vector<int> &a, vector<int> &b) {
return a[1] == b[1] ? a[0] > b[0] : a[1] < b[1];
}
bool solve(vector<vector<int>> &v) {
sort(v.begin(), v.end(), cmp);
vector<vector<int>> ret;
for (auto &it : v) {
if (ret.empty())
ret.push_back(it);
else if (ret.back()[0] >= it[0])
return true;
else
ret.push_back(it);
}
return false;
}
};
main() {
Solution ob;
vector<vector<int>> v = {{2,4},{5,11},{5,9},{10,10}};
cout << (ob.solve(v));
} 입력
{{2,4},{5,11},{5,9},{10,10}} 출력
1