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

ผลิตภัณฑ์ Subarray สูงสุด | เพิ่มกรณีผลิตภัณฑ์เชิงลบใน C++


ในปัญหานี้ เราได้รับอาร์เรย์ของจำนวนเต็ม (บวกและลบ) งานของเราคือสร้างโปรแกรมเพื่อคำนวณ Maximum ProductSubarray ใน C++

วิธีแก้ไขปัญหา − ในที่นี้ เรามีอาร์เรย์ที่มีตัวเลขบวก ลบ และศูนย์ เราจำเป็นต้องค้นหาผลคูณของอาร์เรย์ย่อยที่สร้างโดยองค์ประกอบของอาร์เรย์ และเพิ่มผลผลิตของอาร์เรย์ย่อยให้สูงสุด

มาดูตัวอย่างเพื่อทำความเข้าใจปัญหากัน

อินพุต

arr[] = {-1, 2, -7, -5, 12, 6}

ผลลัพธ์

5040

คำอธิบาย

อาร์เรย์ย่อยที่มีผลิตภัณฑ์สูงสุดคือ {2, -7, -5, 12, 6}

Product = 5040

แนวทางการแก้ปัญหา

เพื่อแก้ปัญหานี้ เราได้รับอาร์เรย์และผลิตภัณฑ์สูงสุดของอาร์เรย์ย่อยและจัดการ maxVal ซึ่งเป็นผลิตภัณฑ์สูงสุดไม่เกินองค์ประกอบปัจจุบัน และ minVal คือค่าสูงสุดเชิงลบของผลิตภัณฑ์ จากนั้นตามค่าปัจจุบัน maxVal และ minVal จะได้รับการอัปเดตเป็น −

กรณีที่ 1 - องค์ประกอบเป็นบวก - อัปเดต maxVal และ minVal โดยการคูณอาร์เรย์

กรณีที่ 2 - องค์ประกอบเป็นศูนย์ − แบ่งอาร์เรย์ย่อยปัจจุบันด้วยการคูณด้วย 0 จะส่งผลให้เป็น 0

กรณีที่ 3 - องค์ประกอบเป็นลบ - อัปเดตทั้งสองค่าด้วยค่าลบที่ทำให้สูงสุด

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

ตัวอย่าง

#include <iostream>
using namespace std;
int min(int a, int b){
   if(a < b)
      return a;
      return b;
}
int max(int a, int b){
   if(a > b)
      return a;
      return b;
}
int CalcMaxProductSubArray(int arr[], int n) {
   int i = 0;
   int maxVal = -1000;
   int localMax = 1;
   int localMin = 1;
   int lastMax;
   while(i < n) {
      int currentVal = arr[i];
      if (currentVal > 0) {
         localMax = (localMax * currentVal);
         localMin = min(1, localMin * currentVal);
      }
      else if (currentVal < 0) {
         lastMax = localMax;
         localMax = (localMin * currentVal);
         localMin = (lastMax * currentVal);
      } else {
         localMin = 1;
         localMax = 0;
      }
      maxVal = max(maxVal, localMax);
      if (localMax <= 0)
         localMax = 1;
         i++;
   }
   return maxVal;
}
int main(){
   int arr[] = { -1, 2, -7, -5, 12, 6 };
   int n = 6;
   cout<<"The maximum product Subarray is "<<CalcMaxProductSubArray(arr, n);
   return 0;
}

ผลลัพธ์

The maximum product Subarray is 5040