C++中排序并旋转数组中的最大元素


描述

给定一个已排序的不同元素的数组,该数组在某个未知点旋转,任务是找到其中的最大元素。

示例

如果输入数组为 {30, 40, 50, 10, 20},则最大元素为 50。

算法

  • 最大元素是唯一一个其下一个元素小于它的元素。如果没有下一个较小的元素,则没有旋转,即最后一个元素是最大元素。
  • 我们通过将中间元素与其前一个元素 (mid – 1) 和后一个元素 (mid + 1) 进行比较来检查中间元素的此条件。如果最大元素不在中间 (既不是 mid 也不是 mid + 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

更新于:2020年1月10日

401 次浏览

开启您的职业生涯

完成课程获得认证

开始学习
广告
© . All rights reserved.