คำชี้แจงปัญหา
รับอาร์เรย์ arr[] ขององค์ประกอบ N และจำนวนเต็ม K โดยที่ K
หากอาร์เรย์อินพุตคือ {1, 3, 2, 5} และ k =3 แล้ว−
- การจัดเรียงอาร์เรย์จะกลายเป็น {1, 2, 3, 5}
- แทรก 3 องค์ประกอบที่มากกว่า 5 หลังจากที่อาร์เรย์การดำเนินการนี้กลายเป็น {1, 2, 3, 5, 6, 6, 6}
- ค่ามัธยฐานของอาร์เรย์ใหม่คือ 5
อัลกอริทึม
<ก่อน>1. ในการเพิ่มค่ามัธยฐานของอาร์เรย์ผลลัพธ์ให้สูงสุด องค์ประกอบทั้งหมดที่ต้องแทรกต้องมากกว่าองค์ประกอบสูงสุดจากอาร์เรย์2 จัดเรียงอาร์เรย์และค่ามัธยฐานของอาร์เรย์จะเป็น arr[ขนาด / 2] หากขนาดเป็นเลขคี่อื่น (arr[(ขนาด / 2) – 1] + arr[ขนาด / 2]) / 2 ตัวอย่าง
#include ใช้เนมสเปซ std;double getMaxMedian(int *arr, int n, int k){ int newSize =n + k; ค่ามัธยฐานสองเท่า เรียงลำดับ(arr, arr + n); ถ้า (newSize % 2 ==0) { ค่ามัธยฐาน =(arr [(newSize / 2) - 1] + arr [newSize / 2]) / 2; ค่ามัธยฐานกลับ; } มัธยฐาน =arr[newSize / 2]; ค่ามัธยฐานกลับ;}int main(){ int arr[] ={1, 3, 2, 5}; int n =sizeof(arr) / sizeof(arr[0]); int k =3; ศาล <<"ค่ามัธยฐานสูงสุด =" < ผลลัพธ์
เมื่อคุณคอมไพล์และรันโปรแกรมข้างต้น มันสร้างผลลัพธ์ดังต่อไปนี้−
ค่ามัธยฐานสูงสุด =5