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); } }