您的位置:首页 > 其它

求局部最大值

2016-05-03 20:46 357 查看
求局部最大值问题:

给定一个无重复元素的数组A[0...N-1],找到一个该数组的局部最大值。

问题分析:

遍历一遍得全局最大值,它显然是局部最大值,但是时间复杂度是O(n),现在要求时间复杂度为O(logn)。

问题求解过程类似于二分查找,但是还不完全一样,需要分析清楚问题来源。问题中只需要求出一个局部最大值,并且数组中不考虑重复的元素。

因此,可以每次取中间点,当A[mid] > A[mid+1] 丢弃后半段,right = mid; 当A[mid] < A[mid+1],丢弃前半段,left = mid+1。

程序实现:

/***************************************
FileName LocalMaxiNum.cpp
Author : godfrey
CreatedTime : 2016/5/3
****************************************/
#include <iostream>
#include <cstring>
#include <vector>
#include <algorithm>
#include <stdio.h>
#include <stdlib.h>

using namespace std;

int LocalMaxiNum(const int* A,int size){
int Left = 0;
int Right = size - 1;
int mid;
while(Left < Right){
mid = (Left + Right) / 2;
cout<<"mid : "<<mid<<"  Left : "<<Left<<endl;
if(A[mid] < A[mid+1]){
Left = mid + 1;
}
else{
Right = mid;
}
}
return A[Left];
}
int main()
{
int a[] = {1,2,3,4,5,3,2,0,3,4,7,6,5};
int LocMaxNum = LocalMaxiNum(a,sizeof(a)/sizeof(int));
cout<<"one LocalMaxiNum : ";
cout<<LocMaxNum<<endl;
return 0;
}


运行结果:



转载请注明出处:

C++博客园:godfrey_88

http://www.cnblogs.com/gaobaoru-articles/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: