C ++中间隔中最频繁的数字
假设我们有一个整数间隔列表,其中每个元素的间隔都像[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
对于每一个键
cnt:=最后
val:=它
最后:=最后+它的值
如果last>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