假设我们有一个整数间隔列表,其中每个元素的间隔都像[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