Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++에서 정렬 및 회전된 배열의 최대 요소

<시간/>

설명

알 수 없는 지점에서 회전하는 고유한 요소의 정렬된 배열이 주어지면 작업은 그 안에 있는 최대 요소를 찾는 것입니다.

예시

입력 배열이 {30, 40, 50, 10, 20}인 경우 최대 요소는 50입니다.

알고리즘

  • 최대 요소는 그 다음이 그보다 작은 유일한 요소입니다. 다음으로 작은 요소가 없으면 회전이 없습니다. 즉, 마지막 요소가 최대값입니다.
  • 중간 요소에 대한 이 조건을 mid – 1 및 mid + 1에 있는 요소와 비교하여 확인합니다. 최대 요소가 mid – 1 및 mid + 1에 있는 요소와 비교하여 확인합니다. 최대 요소가 중간에 있지 않은 경우 mid + 1), maxelement는 왼쪽 절반 또는 오른쪽 절반에 있습니다 -
    • 가운데 요소가 마지막 요소보다 크면 최대 요소가 왼쪽에 위치합니다.
    • 다른 최대 요소는 오른쪽 절반에 있음

예시

#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