ปัญหา
ในปัญหานี้ เราได้รับอาร์เรย์ arr[] ของจำนวนเต็ม งานของเราคือสร้างโปรแกรมเพื่อหาผลคูณสูงสุดของเซิร์บอาร์เรย์ - ใช้การเดินทางสองครั้งใน C++
คำอธิบายปัญหา - ที่นี่ในอาร์เรย์ เราจะหาผลคูณสูงสุดของเซิร์บอาร์เรย์โดยใช้การเดินทางสองครั้ง หนึ่งจากดัชนี 0 และอีกอันจากดัชนี (n-1)
ตัวอย่าง
มาดูตัวอย่างเพื่อเข้าใจปัญหา
อินพุต
arr[] = {4, -2, 5, -6, 0, 8}
เอาต์พุต
240
ตัวอย่าง
Subarray = {4, -2, 5, -6} Maximum product = 4 * (-2) * 5 * (-6) = 240
วิธีแก้ปัญหา
เพื่อแก้ปัญหานี้โดยใช้การเดินทางสองครั้ง ที่นี่ เราจะหาผลคูณสูงสุดโดยใช้ค่าสูงสุดท้องถิ่นสองค่าสำหรับการเดินทางจากซ้ายไปขวา คือจากดัชนี 0 ถึง n-1 และอีกอันสำหรับการเดินทางจากขวาไปซ้าย คือจากดัชนี n-1 ถึง 0 อัลกอริทึมส่วนที่เหลือเหมือนกับการหาผลคูณสูงสุดของเซิร์บอาร์เรย์
ตัวอย่างโค้ด
โปรแกรมแสดงการทำงานของคำตอบของเรา
#include<iostream>
using namespace std;
int CalcMaxProductSubArray(int arr[], int n) {
int frntMax = 1, rearMax = 1, maxVal = 1;
for (int i=0; i=0; i--) {
rearMax = rearMax * arr[i];
if (rearMax == 0)
rearMax = 1;
}
maxVal = max(frntMax, rearMax);
return maxVal;
}
int main() {
int arr[] = {4, -2, 5, -6, 0, 8};
int n = sizeof(arr)/sizeof(arr[0]);
cout<<"Maximum product subarray is "<<CalcMaxProductSubArray(arr, n);
return 0;
}
เอาต์พุต
Maximum product subarray is 240