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

องค์ประกอบสูงสุดในอาร์เรย์ที่จัดเรียงและหมุนใน C++


คำอธิบาย

เมื่อได้รับอาร์เรย์ที่จัดเรียงขององค์ประกอบที่แตกต่างกันซึ่งหมุนไปยังจุดที่ไม่รู้จัก ภารกิจคือการค้นหาองค์ประกอบสูงสุดในนั้น

ตัวอย่าง

หากอาร์เรย์อินพุตคือ {30, 40, 50, 10, 20} องค์ประกอบสูงสุดคือ 50

อัลกอริทึม

  • องค์ประกอบสูงสุดคือองค์ประกอบเดียวที่มีขนาดเล็กกว่าองค์ประกอบถัดไป หากไม่มีองค์ประกอบที่เล็กกว่าถัดไป แสดงว่าไม่มีการหมุน นั่นคือองค์ประกอบสุดท้ายคือค่าสูงสุด
  • เราตรวจสอบเงื่อนไขนี้สำหรับองค์ประกอบระดับกลางโดยเปรียบเทียบกับองค์ประกอบที่ระดับกลาง – 1 และระดับกลาง + 1 หากองค์ประกอบสูงสุดมีองค์ประกอบที่ระดับกลาง – 1 และระดับกลาง + 1 หากองค์ประกอบสูงสุดไม่อยู่ตรงกลาง กลาง + 1) จากนั้นองค์ประกอบสูงสุดจะอยู่ครึ่งซ้ายหรือครึ่งขวา −
    • หากองค์ประกอบกลางมีค่ามากกว่าองค์ประกอบสุดท้าย องค์ประกอบสูงสุดจะอยู่ที่ครึ่งซ้าย
    • องค์ประกอบสูงสุดอื่นอยู่ในครึ่งขวา

ตัวอย่าง

#include <bits/stdc++.h>
using namespace std;
int getMaxinSortedAndRorated(int *arr, int lont high) {
   if (high < low) {
      return arr[0];
   }
   if (high == low) {
      return arr[high];
   }
   int mid = low + (high - low) / 2;
   if (mid < high && arr[mid + 1] < arr[) {
      return arr[mid];
   }
   if (mid > low && arr[mid] < arr[mid - {
      return arr[mid - 1];
   }
   if (arr[low] > arr[mid]) {
      return getMaxinSortedAndRoratrr, low, mid - 1);
   } else {
      return getMaxinSortedAndRoratrr, mid + 1, high);
   }
}
int main() {
   int arr[] = {30, 40, 50, 10, 20};
   int n = sizeof(arr) / sizeof(arr[0]);
   cout << "Maximum element = " << getMaortedAndRorated(arr, 0, n - 1) << endl;
   return 0;
}

ผลลัพธ์

เมื่อคุณคอมไพล์และรันโปรแกรมข้างต้น มันสร้างผลลัพธ์ต่อไปนี้ -

Maximum element = 5