给定一个在不同的未知点旋转的不同元素的排序数组,任务是在其中找到最大元素。
如果输入数组为{30,40,50,10,20},则最大元素为50。
maximum元素是next小于它的唯一元素。如果没有下一个较小的元素,则没有旋转,即最后一个元素为最大
我们通过将其与中– 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