單峰問題分治法演算法(C++實現)
阿新 • • 發佈:2018-12-21
給定含有n個不同的陣列成的陣列L=<x1,x2,x3,…,xn>,如果L中存在xi使得,則稱x1<x2 <…<xi-1<xi且xi>xi+1>…>xn則稱L是單峰的,並稱xi是L的峰頂。假設L是單峰的,設計演算法找到L的峰頂。 將n個元素的陣列分為差不多大的兩個n/2的陣列; 根據分界線,直接淘汰掉一半,縮小範圍。
程式碼實現:(時間複雜度:O(log(2)(n))
#include<iostream> using namespace std; int Peak(int a[],int left,int right) { if(left==right) return left; int mid=(left+right)/2; if(a[mid]<a[mid+1]&&a[mid-1]<a[mid]) return Peak(a,mid,right); else if(a[mid]>a[mid+1]&&a[mid-1]>a[mid]) return Peak(a,left,mid); else if(a[mid]>a[mid-1]&&a[mid]>a[mid+1]) return mid; else return -1; } int main() { int a[]={1,2,3,4,5,4,2,1}; cout<<Peak(a,0,7)<<endl; return 0; }