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

ผลคูณสูงสุดของเซิร์บอาร์เรย์ - ใช้การเดินทางสองครั้งใน C++

ปัญหา

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