旋转数组的最小数字

package com.algorithm;

import java.util.Arrays;

/*把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。
输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。
例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。
NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。*/
public class RotateNumber {
    //运行时间:195ms
    //占用内存:4307k
     public int minNumberInRotateArray(int [] array) {
            if(array.length == 0) 
                return 0;
            int[] arrayb = new int[array.length];
            int count = 0;//记录下标值,最大的那个
            int j = 0;
            for(int i = 0; i < array.length; i++) {
                j = i+1;
                if(j < array.length && array[i] > array[j]){
                    count = j;
                    break;
                }
            }
            //找到下标后,分为两部分,count 后面的移到arrayb中,然后将count前面
            //的再移到后面
            for(int i = 0; i < arrayb.length;i++) {
                //移动后面的
                for(int k = count; k < arrayb.length && i < arrayb.length; k++) {
                    arrayb[i] = array[k];
                    i++;
                }
                //移动前面的
                for(int k = 0; k < count && i < arrayb.length; k++){
                    arrayb[i] = array[k];
                    i++;
                }
            }
            return arrayb[0];
        }
     public static void main(String[] args) {
         int a[] = {3,4,5,1,2};
         int m = new RotateNumber().minNumberInRotateArray(a);
         System.out.println(m);
    }
}

 

posted @ 2017-03-03 11:15  fankongkong  阅读(125)  评论(0编辑  收藏  举报