6.局部最小值问题

什么是局部最小值?如下:
  给定一个序列,在这个序列中如果存在一个数,小于等于它的前一个数且小于等于它的后一个数,那么就称之为局部最小。
(注:如果是两边则只看一个即可,即如果是序列头部,则头部元素小于等于第二个元素即可;同理,如果是`尾部元素,则尾部元素小与次尾部元素即可)

int GetPartMin(int arr[], int size)
{
  if (!arr) return -1;
  if (size < 2) return 0;
    
  if (arr[0] < arr[1]) return 0;
    
  if (arr[size-2] > arr[size-1]) return size-1;
    
  int left = 0;
  int right = size-1;
  int mid = 0;
    
  while (left < right)
  {
    mid = left + ((right-left)>>1);
        
    if (arr[mid] > arr[mid-1])
    {
        right = mid - 1;
    }
    else if (arr[mid] < arr[mid + 1])
    {
        left = mid + 1;
    }
    else
    {
        return mid;
    }
  }
    
    return -1;
}
posted @ 2022-09-08 11:05  test369  阅读(81)  评论(0编辑  收藏  举报