求先递增在递减数组中的最大值

题目:一个数组先从小到大递增在从大到小递减,找出数组的最大值。
思路:可以依次遍历整个数组如果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;
}
点赞