相关疑难解决方法(0)

划分并征服应用于在阵列中找到峰值的算法.

对于阵列的:一个1,一个2,...一个ķ,...一个Ñ,一个ķ是峰值当且仅当一个K-1 ≤一个ķ ≥一个K + 1时1 <K和K <N.一个1是,如果一个峰1 ≥一个2Ñ是,如果一个峰N-1 ≤一个Ñ.目标是从阵列中找到一个峰值.

分而治之的算法如下:

find_peak(a,low,high):
    mid = (low+high)/2
    if a[mid-1] <= a[mid] >= a[mid+1] return mid // this is a peak;
    if a[mid] < a[mid-1] 
        return find_peak(a,low,mid-1) // a peak must exist in A[low..mid-1]
    if a[mid] < a[mid+1]
        return find_peak(a,mid+1,high) // a peak must exist in A[mid+1..high]
Run Code Online (Sandbox Code Playgroud)

为什么这个算法是正确的?我认为它可能会失去一半存在峰值的阵列.

algorithm divide-and-conquer

5
推荐指数
1
解决办法
2606
查看次数

算法:修改二进制搜索

我正试图解决一个经典的面试问题,这个问题基本上是在列表上进行二元搜索,然后逐渐增加然后减少.即使很明显我们可以实现O(log n),但我无法弄清楚我写的下面的代码有什么问题:

#include <iostream>

using namespace std;


int binarySearch(int *A, int low, int high, int key)
{
    while(low < high)
    {
        int mid = (low + high) / 2;
        if(key < A[mid])
        {
            if(A[mid - 1] < A[mid] && A[mid] < A[mid + 1])
                high = mid - 1;
            else
                low = mid + 1;
        }
        else if(key > A[mid])
        {
            if(A[mid - 1] < A[mid] && A[mid] < A[mid + 1])
                low = mid + 1;
            else …
Run Code Online (Sandbox Code Playgroud)

c++ algorithm binary-search

4
推荐指数
1
解决办法
1393
查看次数