局部最小值位置

来源:互联网 发布:淘宝全屏优惠券代码 编辑:程序博客网 时间:2024/06/05 16:57
定义局部最小的概念。arr长度为1时,arr[0]是局部最小。arr的长度为N(N>1)时,如果arr[0]<arr[1],那么arr[0]是局部最小;如果arr[N-1]<arr[N-2],那么arr[N-1]是局部最小;如果0<i<N-1,既有arr[i]<arr[i-1]又有arr[i]<arr[i+1],那么arr[i]是局部最小。 给定无序数组arr,已知arr中任意两个相邻的数都不相等,写一个函数,只需返回arr中任意一个局部最小出现的位置即可。
class Solution {public:    int getLessIndex(vector<int> arr) {        int n = arr.size();        if(n <= 0) return -1;        if(n == 1) return 0;        if(arr[0] < arr[1]) return 0; //考虑最左边        if(arr[n-1] < arr[n-2]) return n-1;   //考虑最右边                 int left=1,right=n-2;//对中间部分寻找局部最小        while(left <= right){            int mid = (left+right)/2;            if(arr[mid-1] > arr[mid] && arr[mid+1] > arr[mid])                return mid;            else if(arr[mid] > arr[mid-1])                right = mid-1;            else if(arr[mid] > arr[mid+1])                left = mid+1;        }        return -1;    }};


原创粉丝点击