Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

เพิ่มองค์ประกอบให้ใหญ่สุดโดยใช้อาร์เรย์อื่นใน C++


คำชี้แจงปัญหา

กำหนดอาร์เรย์สองชุดที่มีขนาด n ให้ขยายอาร์เรย์แรกให้ใหญ่สุดโดยใช้องค์ประกอบจากอาร์เรย์ที่สองเพื่อให้อาร์เรย์ใหม่มีองค์ประกอบที่ยิ่งใหญ่ที่สุดแต่ไม่ซ้ำกันของทั้งสองอาร์เรย์ที่ให้ความสำคัญกับอาร์เรย์ที่สอง กล่าวคือ องค์ประกอบทั้งหมดของอาร์เรย์ที่สองจะปรากฏก่อนอาร์เรย์แรก อาร์เรย์ ลำดับของลักษณะที่ปรากฏขององค์ประกอบควรเหมือนกันในผลลัพธ์เช่นเดียวกับอินพุต

ถ้า arr1[] ={12, 15, 10} และ arr2[] ={16, 17, 5} แล้ว {16, 17, 15} จะเป็นองค์ประกอบสูงสุดจากอาร์เรย์ทั้งสองโดยการรักษาลำดับ

อัลกอริทึม

<ก่อน>1. สร้างอาร์เรย์ชั่วคราวขนาด 2 * n2 จัดเก็บองค์ประกอบของ arr1 และ arr2 ในอาร์เรย์ชั่วคราวและเรียงลำดับจากมากไปหาน้อย 3 เพื่อรักษาลำดับขององค์ประกอบตามอาร์เรย์อินพุต เราจะใช้ hash table4 จัดเก็บองค์ประกอบที่ไม่ซ้ำกันที่ใหญ่ที่สุดอันดับแรกของอาร์เรย์ชั่วคราวในตารางแฮช 5 สำรวจอาร์เรย์ที่สองและเก็บองค์ประกอบของอาร์เรย์ที่สองในอาร์เรย์ชั่วคราวที่มีอยู่ในตารางแฮช6 ในทำนองเดียวกัน สำรวจอาร์เรย์แรกและเก็บองค์ประกอบที่มีอยู่ในตารางแฮช7 ด้วยวิธีนี้ เราจะได้รับ n องค์ประกอบที่ไม่ซ้ำกันและใหญ่ที่สุดจากทั้งสองอาร์เรย์ในอาร์เรย์ชั่วคราว

ตัวอย่าง

#include ใช้เนมสเปซ std;void printArray(int *arr, int n){ สำหรับ (int i =0; i  b;}void getMaxElements(int *arr1, int *arr2, int n){ int temp[2 * n]; int k =0; สำหรับ (int i =0; i  แฮช; int ผม =0; ในขณะที่ (hash.size() !=n) { if (hash.find(temp[i]) ==hash.end()) { hash.insert(temp[i]); } ++ผม; } k =0; สำหรับ (int i =0; i  

ผลลัพธ์

เมื่อคุณคอมไพล์และรันโปรแกรมข้างต้น มันสร้างผลลัพธ์ต่อไปนี้ -

อาร์เรย์แรก:12 15 10อาร์เรย์ที่สอง:16 17 5อาร์เรย์สูงสุด:16 17 15