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
广告
数据结构
网络
关系数据库管理系统 (RDBMS)
操作系统
Java
iOS
HTML
CSS
Android
Python
C语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP