题目描述
算法设计+题目分析
分析题目:
1、排序找到中间数;
2、计算数组中比中间数小的数量;
3、计算数组中比中间数大的数量;
4、二者比较得出结果。
注意点+记录点
如果数字数量是奇数的时候,最间的那个必然是中间数或者不是;
如果数字数量是偶数的时候,必须是中间2个数字都是中间数或者不是,所以中间两个数字任取即可。
代码(100分)
环境
Visual C++6.0
#include <stdio.h>
#include <vector>
#include <algorithm>
using namespace std;
int main(){
int n;
scanf("%d", &n);
vector<int> seq;
int t;
for (int i=0; i<n; i++){
scanf("%d", &t);
seq.push_back(t);
}
sort(seq.begin(), seq.end());//排序
int mid=seq[(seq.size()-1)/2];//如果是奇数,就处于中间,如果是偶数,就处于中间偏左
int low=0;
for (int k=0; k<n; k++){
if (seq[k]==mid) break;
low++;
}
int high=0;
for (int z=n-1; z>=0; z--){
if (seq[z]==mid) break;
high++;
}
if (low==high) printf("%d", mid);
else printf("%d", -1);
return 0;
}
感谢链接
无