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