目前,我指的是MIT OpenCourseWare在下面的视频教程中找到1-D阵列峰值的解释。
https://www.youtube.com/watch?v=HtSuA80QTyo
递归关系:T(n)=T(n/2) + O(1)
仅强调数组的一半加上它将导致一个峰值作为输出。什么可能是复发关系已经说过存在多个峰值。
请有人对这个问题有所了解。
提前致谢!
答案 0 :(得分:1)
视频中存在的问题是:在A[0...N-1]
或A[i]
或{{1}时,在{1}}中找到一个峰值,其中A[i] >= A[i-1] and A[i] >= A[i+1]
是一个峰值}。数组可能有很多峰值,请注意您只需要提供任何一个峰值。这个问题可以通过分而治之的算法来解决。我在i = 0 and A[i] >= A[i+1]
中实现了它。
i = N-1 and A[i] >= A[i-1]
实际上,这个算法与二进制搜索相同。您可以在每一步将阵列切割一半。那是C
,例如// it return the index of the peak.
//it can contain many peak, you can return Any One.
int find_a_peak(int a[], int low, int hi) {
if (low == hi) return low;
if (low == hi - 1) return a[low] > a[hi] ? low : hi;
int mid = (low + hi) / 2;
if (a[mid] >= a[mid+1]) {
//At least one peak can be found in the subarray A[low,low+1,...,mid]
return find_a_peak(a, low, mid);
} else {
//At least one peak can be found in the subarray A[mid+1,...,hi]
return find_a_peak(a, mid+1, hi);
}
}
)。