<pre name="code" class="cpp">#include<iostream>
#include<vector>
using namespace std;
int mode(vector<int>& a, int left, int right, int& num)
{
int L = left, R = right;
int T = a[L];
while (L < R) {
while (a[R] >= T && L < R) --R;
a[L] = a[R];
while (a[L] < T && L < R) ++L;
a[R] = a[L];
}
int M1 = L;
R = right;
while (L < R) {
while (a[R] > T && L < R) --R;
a[L] = a[R];
while (a[L] <= T && L < R) ++L;
a[R] = a[L];
}
a[L] = T;
int M2 = L;
int cntm = M2 - M1 + 1;
num = T;
int cnt1, cnt2, T1, T2;
if (left < M1 - 1 && M1 - left + 1 > cntm) {
cnt1 = mode(a, left, M1 - 1, T1);
if (cntm < cnt1) {
cntm = cnt1;
num = T1;
}
}
if (M2 + 1 < right && right - M2 + 1 > cnt
算法分析之众数问题O(nlogn)
最新推荐文章于 2023-07-02 15:05:23 发布