题解 | #中位数#
中位数
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,连续两个不会影响各自的绝对位置