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

อาร์เรย์ย่อยความยาวสูงสุดที่มีความแตกต่างระหว่างองค์ประกอบที่อยู่ติดกันเป็น 0 หรือ 1 ใน C++


เราได้รับอาร์เรย์ทุกขนาดและภารกิจคือการค้นหาอาร์เรย์ย่อยของอาร์เรย์ที่กำหนดโดยองค์ประกอบที่มีความแตกต่างระหว่างองค์ประกอบที่อยู่ติดกันเป็น 0 หรือ 1

ป้อนข้อมูล − int arr[] ={ 2, 1, 5, 6, 3, 4, 7, 6}

ผลผลิต − อาร์เรย์ย่อยความยาวสูงสุดที่มีความแตกต่างระหว่างองค์ประกอบที่อยู่ติดกันเนื่องจาก 0 หรือ 1 คือ − 2

คำอธิบาย − องค์ประกอบที่อยู่ติดกันในอาร์เรย์ที่มีความแตกต่างเป็น 0 หรือ 1 คือ {2, 1}, {5, 6}, { 3, 4} และ {7.6} ดังนั้น ความยาวสูงสุดของอาร์เรย์ย่อยคือ 2

ป้อนข้อมูล − int arr[] ={ 2, 1, 7, 6, 5}

ผลผลิต − อาร์เรย์ย่อยความยาวสูงสุดที่มีความแตกต่างระหว่างองค์ประกอบที่อยู่ติดกันเนื่องจาก 0 หรือ 1 คือ − 3

คำอธิบาย − องค์ประกอบที่อยู่ติดกันในอาร์เรย์ที่มีค่าความแตกต่างเป็น 0 หรือ 1 คือ {2, 1} และ {7, 6, 5}.. ดังนั้น ความยาวสูงสุดของอาร์เรย์ย่อยคือ 3

แนวทางที่ใช้ในโปรแกรมด้านล่างมีดังนี้

  • ป้อนอาร์เรย์ของจำนวนเต็มประเภทซึ่งสามารถประกอบด้วยองค์ประกอบบวกและลบได้
  • คำนวณขนาดของอาร์เรย์และส่งอาร์เรย์และขนาดไปยังฟังก์ชันเพื่อการทำงานเพิ่มเติม
  • นำตัวแปรชั่วคราว i และตั้งค่าเป็น 0 และตัวแปรสูงสุดแล้วตั้งค่าเป็น 0
  • เริ่มลูปตั้งแต่ i จนถึงขนาดของอาร์เรย์
  • ภายในลูป ตั้งค่า j เป็น i
  • เริ่มลูปอื่นซึ่งจะคำนวณอาร์เรย์ย่อยด้วยองค์ประกอบที่อยู่ติดกันไม่ว่าจะเป็น 0 หรือไม่
  • ภายในลูป ให้เพิ่มค่าของ i
  • ตั้งค่าอุณหภูมิเป็น i-j+1
  • ตรวจสอบว่าค่าสูงสุดน้อยกว่าอุณหภูมิหรือไม่ จากนั้นตั้งค่าสูงสุดเป็นอุณหภูมิ
  • ตรวจสอบว่า j เท่ากับ i หรือไม่ จากนั้นให้เพิ่มค่าของ i
  • ผลตอบแทนสูงสุด
  • พิมพ์ผลลัพธ์

ตัวอย่าง

#include<bits/stdc++.h>
using namespace std;
//function to calculate maximum Length subarray with
// 0 or 1 difference between adjacent elements
int maximum_diff(int arr[], int size){
   int i = 0;
   int maximum = 0;
   while (i < size){
      int j = i;
      while (i+1 < size && (abs(arr[i] - arr[i + 1]) == 1 || abs(arr[i] - arr[i + 1]) == 0)){
         i++;
      }
      int temp = i - j + 1;
      if (maximum < temp){
         maximum = temp;
      }
      if(j == i){
         i++;
      }
   }
   return maximum;
}
int main(){
   int arr[] = { 2, 1, 5, 6, 3, 4, 7, 6};
   int size = sizeof(arr) / sizeof(arr[0]);
   cout<<"Maximum length subarray with difference between adjacent elements as either 0 or 1
   are: "<< maximum_diff(arr, size);
}

อินพุต

Maximum length subarray with difference between adjacent elements as either 0 or 1 are: 2