妾身的想法是先排序,找到那个排在最中间的一个或两个数 ,再判断这个数左右两边是否相等就好了。一定要满足同时相等或不相等,如果其中一边与中间的数相等,那么显然左右两边的个数就不会相同了。
#include <iostream>
#include<algorithm>
using namespace std;
int isSameMaxMinSum(int arr[], int left, int right,int mid)
{
while (left >= 0)
{
if (arr[left] == arr[right])
{
if (arr[left] != mid)
{
return mid;
}
}
else
{
if (arr[left] != mid && arr[right] != mid)
{
return mid;
}
else
{
return -1;
}
}
left--;
right++;
}
return mid;
}
int main()
{
int n;
cin >> n;
int arr[1000];
int i = 0;
for (i = 0; i < n; i++)
{
cin >> arr[i];
}
sort(arr, arr + n);//先排序
int result;
if (n % 2 == 1)
{
result = isSameMaxMinSum(arr, (n+1)/2-2, (n + 1) / 2, arr[n / 2]);
}
else
{
if (arr[n / 2] == arr[n / 2 - 1])
{
result = isSameMaxMinSum(arr, n / 2 - 2, n / 2 + 1, arr[n / 2 - 1]);
}
else
{
result = -1;
}
}
cout << result << endl;
system("pause");
return 0;
}