각 요소에 [start, end]와 같은 간격이 있는 정수 간격 목록 목록이 있다고 가정합니다. 구간에서 가장 자주 발생하는 번호를 찾아야 합니다. 동점일 경우 가장 작은 수를 반환합니다.
따라서 입력이 [[2, 5],[4, 6],[7, 10],[8, 10]]과 같으면 출력은 4
가 됩니다.이 문제를 해결하기 위해 다음 단계를 따릅니다. −
-
하나의 맵 정의
-
cnt :=0, val :=0
-
x −
의 각 값에 대해-
(m[it[0]] 1씩 증가)
-
m[it[1] + 1] 1 감소
-
-
마지막 :=0
-
각 키에 대해 m
-
마지막 :=마지막 + 값
-
마지막> cnt인 경우:
-
cnt :=마지막
-
발 :=그것
-
-
-
반환 값
이해를 돕기 위해 다음 구현을 살펴보겠습니다. −
예시
#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
int solve(vector<vector<int>>& x) {
map <int, int> m;
int cnt = 0;
int val = 0;
for(auto& it : x){
m[it[0]]++;
m[it[1] + 1]--;
}
int last = 0;
for(auto& it : m){
last += it.second;
if(last > cnt){
cnt = last;
val = it.first;
}
}
return val;
}
};
main() {
Solution ob;
vector<vector<int>> v = {{2, 5},{4, 6},{7, 10},{8, 10}};
cout << ob.solve(v);
} 입력 -
{{2, 5},{4, 6},{7, 10},{8, 10}} 출력
4