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

ขนาดสูงสุดของอาร์เรย์ย่อยที่ตรงตามเงื่อนไขที่กำหนดในโปรแกรม C++


ในปัญหานี้ เราได้รับอาร์เรย์ arr[] ของจำนวนเต็ม n ตัว งานของเราคือสร้างโปรแกรมเพื่อค้นหาขนาดสูงสุดของอาร์เรย์ย่อยที่ตรงตามเงื่อนไขที่กำหนด

คำอธิบายปัญหา − เราต้องหาความยาวของ subarray ที่ใหญ่ที่สุดที่ตรงตามเงื่อนไขด้านล่าง

  • arr[k]> arr[k+1] ถ้า k เป็นเลขคี่ และ arr[k]

  • arr[k] arr[k+1] ถ้า k เป็นเลขคู่ สำหรับองค์ประกอบทั้งหมดของอาร์เรย์ย่อย

โดยที่ k คือดัชนีขององค์ประกอบของอาร์เรย์ย่อยใน arr[]

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

อินพุต

arr[] = {7, 3, 1, 5, 4, 2, 9}

ผลลัพธ์

4

คำอธิบาย

The subarray {3, 1, 5, 4} satisfies the condition 1.
k = 1(odd), arr[k] > arr[k+1], 3 > 1
k = 2(even), arr[k] < arr[k+1], 1 < 5
k = 3(odd), arr[k] > arr[k+1], 5 > 4

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

จากตัวอย่างจะเห็นได้ว่าเงื่อนไขใด ๆ ที่เป็นจริง อาร์เรย์ย่อยควรมีองค์ประกอบอื่นที่มากกว่า-เล็กกว่า เช่น ถ้าที่ 1> 2 แล้ว 2> 3 เป็นต้น

ตอนนี้ เพื่อความสะดวกในการคำนวณ เราจะสร้างอาร์เรย์ความสัมพันธ์ที่ระบุความสัมพันธ์นี้ ต่อไปนี้เป็นวิธีที่เราจะปรับแต่งอาร์เรย์ความสัมพันธ์

If arr[i] == arr[i + 1],relArr[i] = ‘E’
If arr[i] > arr[i + 1],relArr[i] = ‘G’
If arr[i] < arr[i + 1],relArr[i] = ‘S’

การใช้อาร์เรย์นี้ทำให้เราสามารถค้นหาขนาดอาร์เรย์ย่อยสูงสุดได้อย่างง่ายดาย Subarray ที่จะพิจารณาจะมี 'G' และ 'S' สำรอง

ตัวอย่าง

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

#include<iostream>
using namespace std;
char findRel(int a, int b) {
   if(a > b)
      return 'G';
   else if(a < b)
      return 'S';
   return 'E';
}
int calcMaxSubArray(int arr[], int n) {
   int maxLen = 1;
   int len = 1;
   char c = findRel(arr[0], arr[1]);
   for(int i = 1; i <= n−1; i++){
      if(c == 'S' && findRel(arr[i], arr[i + 1]) == 'G')
         len++;
      else if(c == 'G' && findRel(arr[i], arr[i + 1]) == 'S')
         len++;
      else {
         if(maxLen < (len + 1))
            maxLen = (len + 1);
         len = 1;
      }
      c = findRel(arr[i], arr[i+1]);
   }
   return maxLen;
}
int main() {
   int arr[] = {7, 3, 1, 5, 4, 2, 9};
   int n = sizeof(arr) / sizeof(arr[0]);
   cout<<"The maximum size of sub−array that satisfies the given
   condition is "<<calcMaxSubArray(arr, n);
}

ผลลัพธ์

The maximum size of sub-array that satisfies the given condition is 4