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

来源:互联网 发布:如何安装php开发环境 编辑:程序博客网 时间:2024/05/21 09:28

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