版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/iceSony/article/details/82623278
问题描述:
代码如下:
#include<iostream>
using namespace std;
void QuickSort(int* t,int* r, int start, int end)
{
if (start >= end) return;
int s = start;
int e = end;
int num = t[start];
int num2 = r[start];
while (start < end)
{
while (t[end] > num && end > start) end--;
while (t[start] <= num && start < end) start++;
int x = t[start];
t[start] = t[end];
t[end] = x;
int y = r[start];
r[start] = r[end];
r[end] = y;
}
t[s] = t[start];
t[start] = num;
r[s] = r[start];
r[start] = num2;
QuickSort(t,r, s, start - 1);
QuickSort(t,r, end + 1, e);
}
int main()
{
int n, num;
int index = 0;
scanf("%d", &n);
int* t = new int[n];
memset(t, -1, sizeof(int)*n);
int* r = new int[n];
memset(r, 0, sizeof(int)*n);
int count = 0;
int* q = new int[n];
while (index < n&&scanf("%d", &num))
{
q[index] = num;
index++;
for (int i = 0; i < n; i++)
{
if (t[i] == -1)
{
t[i] = num;
r[i] = r[i] + 1;
count++;
break;
}
if (t[i] == num)
{
r[i] = r[i] + 1;
break;
}
}
}
QuickSort(t, r, 0, count - 1);
int max = r[0];
int num1=0, num2=0;
for (int i = 0; i < count; i++)
{
int total = 0;
total = r[i];
if ((i + 1 < count) && (t[i + 1] - t[i])<=1) total += r[i + 1];
if (total > max)
{
max = total;
num1 = t[i];
if ((i + 1 < count) && (t[i + 1] - t[i]) <= 1) num2 = t[i + 1];
else num2 = num1;
}
}
for (int i = 0; i < n; i++)
{
if(q[i]== num1||q[i] == num2)
cout << q[i] << endl;
}
printf("最长字符串个数为%d\n", max);
return 0;
}