题目:一个数组先从小到大递增在从大到小递减,找出数组的最大值。
思路:可以依次遍历整个数组如果array[i]满足array[i] > array[i-1] && array[i] > array[i+1],那么i就是最大元素的下标,但是这样做的时间复杂度为O(n)对于有序数组我们可以采用二分查找的方法降低时间复杂度,代码实现如下。
实现代码
#include<iostream>
#include<vector>
using namespace std;
int FindMaxNum(vector<int> array)
{
int len = array.size();
if (0 == len)
return -1;
int left = 0;
int right = len - 1;
int mid = (left + right) >> 1;
while (mid > 0 && mid < len-1)
{
if (array[mid] > array[mid - 1] && array[mid] > array[mid + 1])
return array[mid];
else if (array[mid] > array[mid - 1])
{
left = mid + 1;
mid = (left + right) >> 1;
}
else
{
right = mid - 1;
mid = (left + right) >> 1;
}
}
return -1;
}
int main()
{
vector <int> arr;
for (size_t i = 0; i < 10; i+=2)
{
arr.push_back(i);
}
for (size_t j = 15; j > 5; j-= 3)
{
arr.push_back(j);
}
for (size_t k = 0; k < arr.size(); k++)
{
cout << arr[k] << " ";
}
cout << endl;
int ret = FindMaxNum(arr);
cout << ret;
return 0;
}