zoukankan      html  css  js  c++  java
  • 剑指offer 6.查找和排序 旋转数组的最小数字

    题目描述

    把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。
     
    最简单的为遍历整个数组,找出最小的数,不过这是最笨的办法
     
    解题主要是用二分查找,不过二分查找也有的复杂度过高的情况
     
    以下的结果时间复杂度过高:不通过
     
     
     

    public int minNumberInRotateArray(int [] array) {
    // if (array.length<=0||array==null) {
    // return 0;
    // }
    // int end=array.length-1;
    // int start=0;
    // int mid=-1;
    // while (start<=end) {
    // mid=(start+end)/2;
    // if (array[mid]>array[start]) {
    // start=mid;
    //
    // }
    // else if(array[mid]<array[start]) {
    // end=mid;
    //
    // }
    // if (end==(start+1)) {
    //
    // mid=start+1;
    //
    // }
    // else if (end==start) {
    //
    // mid=end;
    //
    // }
    //
    //
    // }
    //
    //
    //
    //
    // return array[mid];}

    以下为正解:
     

    public int minNumberInRotateArray(int [] array) {

    if (array.length == 0)
    return 0;
    int left = 0;
    int right = array.length - 1;
    int middle = -1;
    while (array[left]>=array[right]) {
    if(right-left==1){
    middle = right;
    break;
    }
    middle = left + (right - left) / 2;
    if (array[middle] >= array[left]) {
    left = middle;
    }
    if (array[middle] <= array[right]) {
    right = middle;
    }
    }
    return array[middle];
    }

  • 相关阅读:
    hdu 1869 六度分离
    hdu 1181 变形课
    hdu 1874 畅通工程续(Floyd)
    07-图5. 旅游规划(25)
    hdu 2544 最短路
    hdu 1874 畅通工程续
    00-自测5. Shuffling Machine (20)
    程序员高效率工作必备工具
    Beyond Compare 如何进行韩文比较
    Beyond Compare如何展开所有子文件夹
  • 原文地址:https://www.cnblogs.com/Transkai/p/10751991.html
Copyright © 2011-2022 走看看