เราได้รับอาร์เรย์ที่เรียงลำดับ เราจำเป็นต้องจัดเรียงอาร์เรย์นี้ในรูปแบบสูงสุด, ต่ำสุด นั่นคือองค์ประกอบแรกคือองค์ประกอบสูงสุด องค์ประกอบที่สองคือองค์ประกอบขั้นต่ำ องค์ประกอบที่สามคือองค์ประกอบสูงสุดที่ 2 องค์ประกอบที่สี่คือองค์ประกอบขั้นต่ำที่ 2 เป็นต้น ตัวอย่างเช่น −
Input : arr[ ] = { 10, 20, 30, 40, 50, 60 } Output : { 60, 10, 50, 20, 40, 30 } Explanation : array is rearranged in the form { 1st max, 1st min, 2nd max, 2nd min, 3rd max, 3rd min } Input : arr [ ] = { 15, 17, 19, 23, 36, 67, 69 } Output : { 69, 15, 67, 17, 36, 19, 23 }
มีวิธีเดียวในการจัดเรียงอาร์เรย์ใหม่ในรูปแบบสูงสุดและต่ำสุด -
แนวทางในการหาทางออก
มีวิธีเดียวในการจัดเรียงอาร์เรย์ใหม่ในรูปแบบสูงสุดและต่ำสุด -
แนวทางสองจุด
ใช้สองตัวแปร min และ max ซึ่งจะชี้ไปที่องค์ประกอบสูงสุดและต่ำสุด และสร้างอาร์เรย์ว่างใหม่ที่มีขนาดเท่ากันเพื่อเก็บอาร์เรย์ที่จัดเรียงใหม่ ตอนนี้ วนซ้ำในอาร์เรย์ และหากองค์ประกอบการวนซ้ำอยู่ที่ดัชนีคู่ ให้เพิ่มองค์ประกอบ arr[max] ลงในอาร์เรย์ที่ว่างเปล่าและลดค่าสูงสุดทีละ 1 หากองค์ประกอบอยู่ที่ดัชนีคี่ ให้เพิ่มองค์ประกอบ arr[min] ไปที่ อาร์เรย์ว่างและเพิ่มค่าต่ำสุด 1 ทำเช่นนี้จนกว่าค่าสูงสุดจะน้อยกว่าค่าต่ำสุด
ตัวอย่าง
#include <bits/stdc++.h> using namespace std; int main () { int arr[] = { 1, 2, 3, 4, 5, 6 }; int n = sizeof (arr) / sizeof (arr[0]); // creating a new array to store the rearranged array. int final[n]; // pointing variables to initial and final element index. int min = 0, max = n - 1; int count = 0; // iterating over the array until max is less than or equals to max. for (int i = 0; min <= max; i++) { // if count is even then store max index element if (count % 2 == 0) { final[i] = arr[max]; max--; } // store min index element else { final[i] = arr[min]; min++; } count++; } // printing the final rearranged array. for (int i = 0; i < n; i++) cout << final[ i ] << " "; return 0; }
ผลลัพธ์
6 1 5 2 4 3
คำอธิบายของโค้ดด้านบน
- ตัวแปรเริ่มต้นเป็น min=0 และ max =array_length(n) - 1.
- for (int i =0; min <=max; i++) เพื่อวนซ้ำในอาร์เรย์จนกว่า max จะมากกว่า min
- หากการนับเป็นเลขคี่ ดังนั้น (สูงสุด) องค์ประกอบจะถูกเพิ่มในอาร์เรย์สุดท้าย และตัวแปร max จะลดลง 1
- สมมติว่าการนับเป็นเลขคู่ (นาที) ในกรณีนั้น อิลิเมนต์จะถูกเพิ่มไปยังอาร์เรย์สุดท้าย และตัวแปร min จะเพิ่มขึ้น 1
- สุดท้าย อาร์เรย์ผลลัพธ์จะถูกเก็บไว้ในอาร์เรย์สุดท้าย[ ]
บทสรุป
ในบทความนี้ เราได้พูดถึงวิธีแก้ปัญหาในการจัดเรียงอาร์เรย์ที่กำหนดใหม่เป็นรูปแบบ max-min เราได้หารือเกี่ยวกับแนวทางการแก้ปัญหาและแก้ไขด้วยวิธีแก้ปัญหาในแง่ดีโดยมีเวลาซับซ้อน O(n) เราก็เขียนโปรแกรม C++ เหมือนกัน ในทำนองเดียวกัน เราสามารถเขียนโปรแกรมนี้ในภาษาอื่นๆ เช่น C, Java, Python เป็นต้น เราหวังว่าคุณจะพบว่าบทความนี้มีประโยชน์