使用 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
广告