使用 C++ 获取 n 个范围中的最大整数


在该问题中,我们给出了 N 个范围。我们的任务是n 个范围中出现的最大整数

对于所有范围的起始和结束值。我们需要找出出现次数最多的值。

我们举个例子来理解该问题:

输入

S1 = 1, E1 = 3
S2 = 2, E2 = 6
S3 = 3, E3 = 4

输出

2

解决方法

解决该问题的简单方法是使用哈希,我们将使用哈希表来统计所有成员及其计数。我们将遍历所有范围并在哈希表中存储计数,然后我们将找到最大计数。

线性时间内解决问题的另一种方法是使用范围数组。在此数组中,我们将通过将 1 添加到所有范围的起始值并从其中减去 1 来更新所有范围的结束值。这将找到前缀和并找到最大前缀和值。

示例

展示我们解决方案工作原理的程序

#include <bits/stdc++.h>
#define MAX 1000000
using namespace std;
int findMaxOccrEle(int L[], int R[], int n){
   int occurenceConut[MAX];
   memset(occurenceConut, 0, sizeof occurenceConut);
   int maxi = -1;
   for (int i = 0; i < n; i++) {
      occurenceConut[L[i]] += 1;
      occurenceConut[R[i] + 1];
      if(R[i]>maxi){
         maxi=R[i];
      }
   }
   int prefSum = occurenceConut[0],maxEleIndex;
   for (int i = 1; i < maxi+1; i++) {
      occurenceConut[i] += occurenceConut[i - 1];
      if (prefSum < occurenceConut[i]) {
         prefSum = occurenceConut[i];
         maxEleIndex = i;
      }
   }
   return maxEleIndex;
}
int main(){
   int L[] = { 1, 2, 3 };
   int R[] = { 3, 6, 4 };
   int n = sizeof(L) / sizeof(L[0]);
   cout<<"The maximum occurred integer in the range is "<<findMaxOccrEle(L, R, n);
   return 0;
}

输出

The maximum occurred integer in the range is 3

更新于:2022 年 2 月 14 日

396 次查看

开启你的职业生涯

完成课程,获得认证

开始
广告