面试题11:旋转数组的最小数字

本题考察的是查找,需要注意的是数组中有相同数字的特例,如果不能很好地处理这些特例,就很难写出让人满意的完美代码。

C++版本

#include <iostream>
#include <vector>
using namespace std;

int minInOrder(vector<int> rotateArray, int index1, int index2){
    int result = rotateArray[index1];
    for(int i = index1 + 1; i <= index2; i++){
        if(result > rotateArray[i]){
            result = rotateArray[i];
        }
    }
    return result;
}

int minNumberInRotateArray(vector<int> rotateArray){
    int index1 = 0;
    int index2 = rotateArray.size()-1;
    int indexMid = index1;
    while(rotateArray[index1] >= rotateArray[index2]){
        if(index2 - index1 == 1){
            indexMid = index2;
            break;
        }
        indexMid = (index1 + index2)/2;
        if(rotateArray[index1]==rotateArray[index2]&&rotateArray[indexMid]==rotateArray[index1])
            return minInOrder(rotateArray, index1, index2);
        if(rotateArray[indexMid] >= rotateArray[index1]){
            index1 = indexMid;
        }
        else if(rotateArray[indexMid] <= rotateArray[index2]){
            index2 = indexMid;
        }
    }
    return rotateArray[indexMid];
}


int main(){
    int a[5] = {1,2,3,4,5};
    cout<<&a[2]<<" "<<&a[3]<<endl;
    cout<<Fibonacci(6)<<endl;
    return 0;
}

posted @ 2020-07-16 20:28  程序员曾奈斯  阅读(117)  评论(0编辑  收藏  举报