码迷,mamicode.com
首页 > 编程语言 > 详细

旋转数组

时间:2018-12-17 22:36:13      阅读:197      评论:0      收藏:0      [点我收藏+]

标签:using   数组   main   cer   null   std   clu   ror   stream   

题目

把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。

#include <iostream>
using namespace std;

class Solution
{
    public:
        int find_min_elem(int a[],int len);
        int min_order(int a[],int left,int right);
};
int Solution::find_min_elem(int a[],int len)
{
    if(a==nullptr||len<=0)
        return -1;
    
    int left=0;
    int right=len-1;
    int middle=left;
    
    while(a[left]>=a[right])
    {
        if(right-left==1)
        {
            return a[right];
            break;
        }
    
        int middle=(left+right)/2;    
        //特殊测试。 a[left]==a[right]&&a[left]==a[middle]三值相等。只能顺序查找 
        if(a[left]==a[right]&&a[left]==a[middle])
            return min_order(a,left,right);
            
        if(a[left]<a[middle])
            left=middle;
        else
            right=middle;
    }
    return a[middle];
}
int Solution::min_order(int a[],int left,int right)
{
    int res=a[left];
    for(int i=left+1;i<=right;++i)
    {
        if(res>a[i])
            res=a[i];
    }
    return res;
}
int main()
{
    Solution s;
    int a[]={1,0,1,1,1};
    int res=s.find_min_elem(a,sizeof(a)/sizeof(a[0]));
    if(res<0)
        cerr<<"error"<<endl;
    else
        cout<<res<<endl;
    return 0;
}

 

旋转数组

标签:using   数组   main   cer   null   std   clu   ror   stream   

原文地址:https://www.cnblogs.com/tianzeng/p/10134274.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!