ในปัญหานี้ เราได้รับอาร์เรย์ arr[] ของจำนวนเต็มบวก n ตัว งานของเราคือสร้างโปรแกรมเพื่อค้นหาผลิตภัณฑ์สูงสุดของลำดับต่อมาที่เพิ่มขึ้นของขนาด 3
คำอธิบายปัญหา − ในที่นี้ เราจำเป็นต้องค้นหาผลคูณสูงสุดขององค์ประกอบ 3 อย่างของอาร์เรย์ เพื่อให้พวกมันก่อตัวเป็นลำดับย่อยที่เพิ่มขึ้น และดัชนีอาร์เรย์ก็เพิ่มขึ้นเช่นกัน เช่น
arr[i]*arr[j]*arr[k] คือค่าสูงสุด,arr[i]มาดูตัวอย่างเพื่อทำความเข้าใจปัญหากัน
อินพุต
arr ={5, 9, 2, 11, 4, 7}ผลลัพธ์
495คำอธิบาย
อาร์เรย์ย่อยทั้งหมดที่มีขนาด 3 ตรงตามเงื่อนไขคือ (5, 9, 11), prod =5*9*11 =495(2, 4, 7), prod =2*4*7 =56Maximum =495ก่อน>แนวทางการแก้ปัญหา
วิธีง่ายๆ ในการแก้ปัญหาคือการวนลูปอาร์เรย์และค้นหาอาร์เรย์ย่อยทั้งหมด 3 ตัวที่ตรงตามเงื่อนไขที่กำหนด
ค้นหาผลิตภัณฑ์ขององค์ประกอบและส่งคืนผลิตภัณฑ์ทั้งหมดสูงสุด
อัลกอริทึม
เริ่มต้น −
maxProd =−1000ขั้นตอนที่ 1 −
วนซ้ำ i −> 0 ถึง n−3ขั้นตอนที่ 1.1 −
วนซ้ำ j −> ฉัน ถึง n−2ขั้นตอนที่ 1.1.1 −
if(arr[i]วน k −> j ถึง n-1 ขั้นตอน 1.1.1.1 −
if(arr[j]find prod =arr[i]*arr[j]*arr[k]. ขั้นตอน 1.1.1.2 −
if(maxProd> prod) −> maxProd =prod.ขั้นตอนที่ 2 −
ส่งคืน maxProdตัวอย่าง
โปรแกรมเพื่อแสดงการทำงานของโซลูชันของเรา
#includeใช้เนมสเปซ std;int calcMaxProd(int arr[], int n){ int maxProd =−1000; ผลิตภัณฑ์ int; สำหรับ (int i =0; i ผลลัพธ์
ผลคูณสูงสุดของลำดับต่อมาที่เพิ่มขึ้นของขนาด 3 คือ 495วิธีแก้ปัญหานี้ง่ายแต่ใช้การวนซ้ำ 3 แบบซึ่งทำให้เวลาซับซ้อนของลำดับ O(n3) มาดูวิธีแก้ปัญหาที่มีประสิทธิภาพกัน
ในโซลูชันนี้ เราจะนำองค์ประกอบของอาร์เรย์จากดัชนี 1 ถึง n-2 และถือว่าเป็นองค์ประกอบกลางของอาร์เรย์ย่อย 3 องค์ประกอบของเรา แล้วหาองค์ประกอบที่เหลืออีกสององค์ประกอบจากอาร์เรย์
องค์ประกอบที่เล็กกว่า arr[i] ในอาร์เรย์ที่มีดัชนีน้อยกว่า i.Element ที่มากกว่า aar[i] ในอาร์เรย์ที่มีดัชนีมากกว่า iพบองค์ประกอบที่เล็กที่สุดโดยใช้แผนผังการค้นหาไบนารีที่ปรับสมดุลตัวเอง และสำหรับองค์ประกอบที่ใหญ่ที่สุด เราจะสำรวจจากขวาไปซ้ายและค้นหาองค์ประกอบสูงสุดทางด้านขวา
หลังจากค้นหาทั้งสองค่าแล้ว เราจะพบ prod ขององค์ประกอบย่อยขององค์ประกอบแล้วค้นหา maxProd โดยการเปรียบเทียบทั้งหมด
ตัวอย่าง
โปรแกรมเพื่อแสดงการทำงานของโซลูชันของเรา
#includeใช้เนมสเปซ std;long calMaxSubSeqProd(int arr[] , int n) { int smallLeftEle[n]; smallLeftEle[0] =-1; set เล็ก; สำหรับ (int i =0; i =1; i−−) { ถ้า (arr[i]> มากกว่าRightEle) มากกว่าRightEle =arr[i]; อื่น if (smallerLeftEle[i] !=−1){ prod =smallLeftEle[i]*arr[i]*greterRightEle; ถ้า(ผล> maxProd) maxProd =แยง; } } ส่งคืน maxProd;}int main () { int arr[] ={5, 9, 2, 11, 4, 7}; int n =sizeof(arr)/sizeof(arr[0]); cout<<"ผลคูณสูงสุดของลำดับย่อยที่เพิ่มขึ้นของขนาด 3 คือ "< ผลลัพธ์
ผลคูณสูงสุดของลำดับต่อมาที่เพิ่มขึ้นของขนาด 3 คือ 495