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

ผลคูณสูงสุดของการเพิ่มขึ้นตามลำดับขนาด 3 ในโปรแกรม C++


ในปัญหานี้ เราได้รับอาร์เรย์ 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