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

ผลิตภัณฑ์ Subarray สูงสุด - การใช้สอง Traversals ใน C++


ในปัญหานี้ เราได้รับอาร์เรย์ arr[] ของจำนวนเต็ม งานของเราคือสร้างโปรแกรมเพื่อค้นหา Subarray ของผลิตภัณฑ์สูงสุด - โดยใช้ Two Traversalsin 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 และอีกอันหนึ่งสำหรับการข้ามจากขวาไปซ้าย เช่น จาก indexn-1 ถึง 0 อัลกอริธึมที่เหลือจะเหมือนกับการค้นหา productubarray สูงสุด

โปรแกรมเพื่อแสดงการทำงานของโซลูชันของเรา

ตัวอย่าง

#include<iostream>
using namespace std;
int CalcMaxProductSubArray(int arr[], int n) {
   int frntMax = 1, rearMax = 1, maxVal = 1;
   for (int i=0; i<n; i++) {
      frntMax = frntMax*arr[i];
      if (frntMax == 0)
         frntMax = 1;
   }
   for (int i=n-1; 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