旋转数组的最小值

来源:互联网 发布:婚礼开场mv制作软件 编辑:程序博客网 时间:2024/04/28 13:37
//这种方法是剑指offer推荐的,但是nowcoder并不能通过#include <iostream>#include <vector>#include <algorithm>using namespace std;int findMin(vector<int>a, int i_begin, int i_end){    int min = a[i_begin];    for (size_t i = i_begin; i <= i_end; i++)    {        if (min>a[i])        {            min = a[i];        }    }    return min;}int rotate(vector<int>a){    int length = a.size();    int i = 0;    int j = length - 1;    int mid = i;    while (a[i] >= a[j])    {        if (j - i == 1)        {            return a[j];            break;        }        if (a[i] == a[mid] && a[i] == a[j])            return findMin(a,i, j);         if (a[mid] > a[i])            i = mid;        if (a[mid] < a[j])            j = mid;        mid = (i + j) / 2;    }    return a[i];}int main(){    int n;    vector<int>a;    while (cin >> n)    {        a.clear();        int tmp;        for (int i = 0; i < n; ++i)        {            cin >> tmp;            a.push_back(tmp);        }        int min = rotate(a);        cout << min << endl;    }    return 0;}//另一种思路链接:https://www.nowcoder.com/questionTerminal/9f3231a991af4f55b95579b44b7a01ba来源:牛客网class Solution {public:    int minNumberInRotateArray(vector<int> rotateArray) {        //数组为空时        if(rotateArray.size() == 0)            return -1;        //前部分数据旋转        for(int i = 0; i < rotateArray.size() - 1; i++){            if (rotateArray[i] > rotateArray[i + 1])                return rotateArray[i + 1];        }        //全部数据旋转,相当于没有旋转,最小数即为第一个数        return rotateArray[0];    }};
原创粉丝点击