【剑指Offer学习】【面试题08:旋转数组的最小数字】

bool findMin(int a[], int start, int end, int* min) {
    if(a == NULL || start > end) {
        return false;
    }
    int minNum = a[start];
    for (int i= start+1; i < end; i++) {
        if (a[i] <= minNum) {
            minNum = a[i];
        }
    }
    *min = minNum;
    return true;
}

bool minNum(int a[], int lenA, int *num) {
    if(a == NULL || lenA <= 0) {
        return false;
    }
    int sIndex = 0;
    int eIndex = lenA - 1;
    while (a[sIndex] >= a[eIndex]) {
        if( eIndex - sIndex == 1 ) {
            *num = a[eIndex];
            return true;
        }
        int mid = sIndex + (eIndex-sIndex)/2;
        if(a[sIndex] == a[mid] && a[eIndex] == a[mid]) {
            int minRet;
            bool flag = findMin(a, sIndex, eIndex, &minRet);
            if (flag) {
                *num = minRet;
                return true;
            }
            else {
                return false;
            }
        }
        if(a[mid] >= a[sIndex]) {
            sIndex = mid;
        }
        else {
            eIndex = mid;
        }
    }
    return true;
}

    int array3[] = {3, 4, 5, 0, 1, 2};
    int minResult;
    minNum(array3, 6, &minResult);

https://blog.csdn.net/BlackShao16/article/details/81609679

发布了81 篇原创文章 · 获赞 68 · 访问量 8万+

猜你喜欢

转载自blog.csdn.net/li198847/article/details/104410633