题解 | #中位数#
中位数
https://www.nowcoder.com/practice/2364ff2463984f09904170cf6f67f69a
#include <iostream>
#include <algorithm>
using namespace std;
int Data[10000];
int main() {
int num;
while (cin >> num) {
if(num==0)
{
return 0;
}
for (int i = 0; i < num; i++) {
cin >> Data[i];
}
if (num % 2 == 0) {
// 如果数组长度是偶数,需要找到中间两个数
std::nth_element(Data, Data + num / 2, Data + num);
int mid1 = Data[num / 2];
std::nth_element(Data, Data + num / 2 - 1, Data + num);
int mid2 = Data[num / 2 - 1];
cout << (mid1 + mid2) / 2 << endl;
} else {
// 如果数组长度是奇数,只需要找到中间那个数
std::nth_element(Data, Data + num / 2, Data + num);
cout << Data[num / 2] << endl;
}
}
}
// 64 位输出请用 printf("%lld")
使用c++的std::nth_element,连续两个不会影响各自的绝对位置
查看19道真题和解析