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

โปรแกรมหาความยาวของบิโทนิกที่ยาวที่สุดใน C++


สมมติว่าเรามีรายการตัวเลข เราต้องหาลำดับย่อยของบิโทนิกที่ยาวที่สุด Aswe ผูกลำดับว่ากันว่าเป็น bitonic ถ้ามันเพิ่มขึ้นอย่างเคร่งครัดแล้วลดลงอย่างเคร่งครัด ลำดับที่เพิ่มขึ้นอย่างเข้มงวดคือบิตโทนิก หรือลำดับที่ลดลงอย่างเคร่งครัดก็เป็นบิตโทนิกเช่นกัน

ดังนั้น หากอินพุตเป็น nums =[0, 8, 4, 12, 2, 10, 6, 14, 1, 9, 5, 13, 3, 11, 7, 15], ขนาดลำดับ 16 แล้ว ผลลัพธ์จะเป็น 7

เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -

  • เพิ่มSubSeq :=อาร์เรย์ใหม่ของขนาดอาร์เรย์ที่กำหนด และเติม 1

  • สำหรับการเริ่มต้น i :=1 เมื่อฉัน <ขนาด อัปเดต (เพิ่ม i ขึ้น 1) ทำ −

    • สำหรับการเริ่มต้น j :=0 เมื่อ j

      • ถ้า arr[i]> arr[j] และเพิ่มSubSeq[i] <เพิ่มSubSeq[j] + 1 แล้ว −

        • เพิ่มSubSeq[i] :=เพิ่มSubSeq[j] + 1

      • *decreasingSubSeq :=อาร์เรย์ใหม่ของขนาดอาร์เรย์ที่กำหนด และเติมด้วย 1

    • สำหรับการเริ่มต้น i :=ขนาด - 2 เมื่อ i>=0, อัปเดต (ลด i โดย 1) ทำ -

      • สำหรับการเริ่มต้น j :=size - 1 เมื่อ j> i อัปเดต (ลด j ทีละ 1) ทำ −

        • ถ้า arr[i]> arr[j] และ decreasingSubSeq[i]

          • decreasingSubSeq[i] :=ลดลงSubSeq[j] + 1

        • สูงสุด :=เพิ่มSubSeq[0] + ลดลงSubSeq[0] - 1

      • สำหรับการเริ่มต้น i :=1 เมื่อฉัน <ขนาด อัปเดต (เพิ่ม i ขึ้น 1) ทำ −

        • หากการเพิ่มSubSeq[i] + การลดลงSubSeq[i] - 1> สูงสุด ดังนั้น:

          • สูงสุด :=เพิ่มSubSeq[i] + ลดลงSubSeq[i] - 1

        • ผลตอบแทนสูงสุด

ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -

ตัวอย่าง

#includeใช้เนมสเปซ std;int longBitonicSub( int arr[], int size ) { int *increasingSubSeq =new int[ขนาด]; สำหรับ (int i =0; i  arr[j] &&การเพิ่มขึ้นSubSeq[i] <เพิ่มSubSeq[j] + 1) เพิ่มSubSeq[i] =เพิ่มSubSeq[j] + 1; int *decreasingSubSeq =ใหม่ int [ขนาด]; สำหรับ (int i =0; i =0; i--) สำหรับ (int j =size-1; j> i; j--) if (arr[i]> arr[j] &&decreasingSubSeq[i ]  max) max =กำลังเพิ่มSubSeq[i] + ลดลง SubSeq[i] - 1; return max;}int main() { int arr[] ={0, 8, 4, 12, 2, 10, 6, 14, 1, 9, 5, 13, 3, 11, 7, 15}; int n =16; cout < 

อินพุต

<ก่อน>[0, 8, 4, 12, 2, 10, 6, 14, 1, 9, 5, 13, 3, 11, 7, 15], 16

ผลลัพธ์

7