zoukankan      html  css  js  c++  java
  • 面试题8:旋转数组的最小数字

    
    
    //把一个数组最开始的若干个元素搬到数组的末尾。eg:{3,4,5,1,2}是{1,2,3,4,5}的旋转数组
    
    #include "stdafx.h"
    #include <iostream>
    using namespace std;
    int MinInOrder(int data[],int index1,int index2);
    int Min(int data[],int length)
    {
        if(data==NULL||length<=0)
            throw new exception("Invalid Parameters:");
    
        int index1=0;
        int index2=length-1;
        int indexMid=index1;//tips1:
        while(data[index1]>=data[index2])
        {
            if(index2-index1==1)
            {
                indexMid=index2;
                break;
            }
            indexMid=(index1+index2)/2;
    
            //tips2:如果index1,index2,indexMid三者相同,就只能顺序查找
            if(data[index1]==data[index2]&&data[index1]==data[indexMid])
                return MinInOrder(data,index1,index2);
            if(data[indexMid]>=data[index1])
                index1=indexMid;
            else if(data[indexMid]<=data[index2])
                index2=indexMid;
        }
        return data[indexMid];
    }
    
    int MinInOrder(int data[],int index1,int index2)
    {
        int result=data[index1];
        for(int i=index1+1;i<index2;i++)
        {
            if(result>data[i])
                result=data[i];
        }
        return result;
    }
    
    
    int _tmain(int argc, _TCHAR* argv[])
    {
        int *data=NULL;
        //int data[1]={1};
        //int data[5]={1,2,3,4,5};
        //int data[5]={3,4,5,1,2};
        //int data[5]={1,1,1,0,1};
        cout<<Min(data,5)<<endl;
        return 0;
    }
    
    
     

     tips1:把indexMid初始化为index1是因为,一旦发现数组中第一个数字小于最后一个数字,表明该数组是排序的,就可以直接返回第一个数字了。

    tips2:如果index1,index2,indexMid三者相同,无法判断中间数字是位于前面子数组还是后面数组中,也就无法移动两个指针来缩小查找范围。此时,不得不采用顺序查找。
  • 相关阅读:
    编程题--简易消除
    条件随机场理论分析CRF(Conditional Random Field)
    受限玻尔兹曼机和深度置信网络
    深度学习的起源、发展和现状
    条件随机场matlab程序下载
    Matlab 运行C程序出现的编译出错问题
    python爬取安居客二手房网站数据
    小白开始
    prctl系统调用设置进程名
    Java 中的 super 关键字
  • 原文地址:https://www.cnblogs.com/Mikuroro/p/4585991.html
Copyright © 2011-2022 走看看